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.jssadece basit events.EventEmitter. Gelen jQuerybu $.fn.bind&& $.fn.trigger. Gelen backbonebu Backbone.Events.triggerve 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 onchangeolayı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 WebSocketprototcol Elimizdeki .onbiz 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 toJSONherhangi bir nesne üzerinde çağrılan bir yöntem tanımlayın . Aradığınızda JSON.stringifydahili olarak arayacak .toJSONJSON 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.