Modül modeli başlangıçta geleneksel yazılım mühendisliğindeki sınıflar için hem özel hem de genel kapsülleme sağlamanın bir yolu olarak tanımlanmıştır.
Modül deseni ile çalışırken, kullanmaya başlamak için kullandığımız basit bir şablon tanımlamayı yararlı bulabiliriz. İşte ad aralığı, genel ve özel değişkenleri kapsayan bir.
JavaScript'te Modül deseni, sınıf kavramını, hem genel / özel yöntemleri hem de değişkenleri tek bir nesnenin içine dahil edebileceğimiz ve böylece belirli bölümleri global kapsamdan koruyacak şekilde daha fazla taklit etmek için kullanılır. Bunun sonucu olarak, işlev adlarımızın sayfadaki ek komut dosyalarında tanımlanan diğer işlevlerle çakışması olasılığındaki bir azalma söz konusudur.
var myNamespace = (function () {
var myPrivateVar, myPrivateMethod;
// A private counter variable
myPrivateVar = 0;
// A private function which logs any arguments
myPrivateMethod = function( foo ) {
console.log( foo );
};
return {
// A public variable
myPublicVar: "foo",
// A public function utilizing privates
myPublicFunction: function( bar ) {
// Increment our private counter
myPrivateVar++;
// Call our private method using bar
myPrivateMethod( bar );
}
};
})();
Avantajları
Modül modeli neden iyi bir seçim? Yeni başlayanlar için, nesne odaklı bir arka plandan gelen geliştiriciler için, en azından bir JavaScript perspektifinden, gerçek kapsülleme fikrinden çok daha temiz.
İkincisi, özel verileri destekler - bu nedenle, Modül modelinde, kodumuzun genel bölümleri özel bölümlere dokunabilir, ancak dış dünya sınıfın özel bölümlerine dokunamaz.
Dezavantajları
Modül modelinin dezavantajları, hem genel hem de özel üyelere farklı eriştiğimizden, görünürlüğü değiştirmek istediğimizde, üyenin kullanıldığı her yerde aslında değişiklikler yapmamız gerektiğidir.
Özel üyelere daha sonra nesneye eklenen yöntemlerle de erişemeyiz . Bununla birlikte, birçok durumda Modül deseni hala oldukça yararlıdır ve doğru kullanıldığında, uygulamamızın yapısını geliştirme potansiyeline kesinlikle sahiptir.
Ortaya Çıkan Modül Modeli
Şimdi modül desenine biraz daha aşina olduğumuza göre, biraz geliştirilmiş bir versiyona bakalım - Christian Heilmann'ın Açığa Çıkarma Modülü deseni.
Açığa Çıkarma Modülü paterni, Heilmann'ın bir ortak yöntemi başka bir yöntemden çağırmak veya ortak değişkenlere erişmek istediğimizde ana nesnenin adını tekrarlamak zorunda kalmasıyla hayal kırıklığına uğradığı için ortaya çıktı. kamuoyuna açıklamak istediği şeyler için gerçek bir gösterime itiraz etmek.
Çabalarının sonucu, tüm işlevlerimizi ve değişkenlerimizi özel kapsamda basitçe tanımlayacağımız ve işaretçilerle anonim bir nesneyi halka açıklamak istediğimiz özel işlevselliğe geri döndüreceğimiz güncellenmiş bir kalıptı.
Açığa Çıkarma Modülünün nasıl kullanılacağına dair bir örnek aşağıda bulunabilir
var myRevealingModule = (function () {
var privateVar = "Ben Cherry",
publicVar = "Hey there!";
function privateFunction() {
console.log( "Name:" + privateVar );
}
function publicSetName( strName ) {
privateVar = strName;
}
function publicGetName() {
privateFunction();
}
// Reveal public pointers to
// private functions and properties
return {
setName: publicSetName,
greeting: publicVar,
getName: publicGetName
};
})();
myRevealingModule.setName( "Paul Kinlan" );
Avantajları
Bu kalıp, komut dosyalarımızın sözdiziminin daha tutarlı olmasını sağlar. Modülün sonunda, hangi fonksiyon ve değişkenlerimizin halka açık olarak erişilebildiğini ve okunabilirliği kolaylaştırarak daha net hale getirir.
Dezavantajları
Bu modelin bir dezavantajı, özel bir işlev bir genel işleve başvuruyorsa, bir düzeltme ekinin gerekli olması durumunda bu genel işlevin geçersiz kılınamayacağıdır. Bunun nedeni, özel işlevin özel uygulamaya başvurmaya devam etmesi ve kalıbın genel üyeler için değil, yalnızca işlevler için geçerli olmasıdır.
Özel değişkenlere atıfta bulunan ortak nesne üyeleri de yukarıdaki yama olmayan kural notlarına tabidir.