Bir Javascript geliştiricisi olarak, geleneksel Tasarım Desenlerini diğer dil / ortamlardakinden önemli veya daha az önemli olarak mı düşünüyorsunuz?
Klasik tasarım desenleri JavaScript için geçerli değildir.
Uygulanan, modüler ve fonksiyonel kod yazmaktır.
Yapıcılar ve birinci sınıf fonksiyonların bir karışımını kullanmalısınız.
Bir JavaScript geliştiricisi olarak, kişisel olarak JavaScript'i Java yerine LISP olarak görmeye yöneliyorum. Bu nedenle, klasik OOP kodunu taklit etmeye çalışmak yerine, monadları ve üst düzey fonksiyonel stil kodunu taklit etmeye çalışın.
Bir Javascript geliştiricisinin düzenli olarak kullandığı ve Javascript gelişiminizde nasıl yardımcı olduklarına dair bir örnek verdiğiniz için lütfen ilk üç tasarım desenini adlandırın.
Yine tasarım desenleri gerçekte bu kadarını uygulamamaktadır ancak aşağıda üç önemli yapı bulunmaktadır.
- Kapakların kullanımı
- Birinci sınıf fonksiyonların kullanımı
- Nesne fabrikalarının kullanımı olan veya olmayan
new
Lütfen, geleneksel tasarım desenlerini kullanarak aynı tür kodları yapmak yerine, bu tür tekniklerin örneklerini gösterebileceğim bir tür bağlam bırakın.
Klasik Tasarım Desenlerinden bazılarına ve bunların js'de nasıl uygulanacağına ve js'nin kendisine daha uygun alternatif kalıplarına bakalım :
Gözlemci Deseni:
Bu node.js
sadece basit events.EventEmitter
. Gelen jQuery
bu $.fn.bind
&& $.fn.trigger
. Gelen backbone
bu Backbone.Events.trigger
ve Backbone.Events.bind
. Bu, günlük kodda kullanılan çok yaygın bir kalıptır.
Asla durmayacağım ve "Hey burada bir gözlemci kalıbı kullanıyorum!" Hayır, bu sadece mesajları iletmenin ya da kademeli değişimin bir yolu.
Örneğin, omurgada, tüm MVC görünümleri, modeller onchange
olayına bağlanır, böylece modeli değiştirmek, değişiklikleri otomatik olarak görünüme göre basamaklandırır. Evet, bu güçlü bir kalıptır, ancak olay odaklı programlamada kullanımı yaygındır, her yerde kullanmıyordu.
Gelen WebSocket
prototcol Elimizdeki .on
biz bağlamak için kullanmak hangi on("message", ...
olaylar. Yine, bu çok yaygındır, ancak klasik OOP tabanlı yerine, bir akış üzerinde bir gözlemcidir while (byte b = Stream.ReadNextByte())
.
Bunların hepsi Gözlemci deseninin güçlü kullanımlarıdır. Ancak bu kullandığınız bir kalıp değildir. Bu dilin basit bir parçası. Bu sadece kod.
Memento Deseni:
Bu sadece JSON. Bir eylemi geri almak için nesnenin durumunu seri hale getirmenize izin verir.
function SomeObject() {
var internalState;
this.toJSON = function() {
return internalState;
}
this.set = function(data) {
internalState = data;
}
this.restore = function(json) {
internalState = JSON.parse(json);
}
}
var o = new SomeObject();
o.set("foo"); // foo
var memento = JSON.stringify(o);
o.set("bar"); // bar
o.restore(memento);
JavaScript'te yerel olarak bir mementos API'sini destekliyoruz. Sadece toJSON
herhangi bir nesne üzerinde çağrılan bir yöntem tanımlayın . Aradığınızda JSON.stringify
dahili olarak arayacak .toJSON
JSON serialize istediğiniz gerçek verilere ulaşmak için nesne üzerinde.
Bu, kodunuzun önemsiz anlık görüntülerini yapmanızı sağlar.
Yine, bunun hatıra bir kalıp olduğunu anlamıyorum. Bu sadece JSON olan serileştirme aracını kullanıyor.
Devlet Deseni / Strateji Deseni:
Devlet düzenine ihtiyacınız yok. Birinci sınıf fonksiyonlarınız ve dinamik tipleriniz var. Sadece işlevleri enjekte edin veya anında özellikleri değiştirin.