يوم 25 سبتمبر 2009 بواسطة الأكسدة والاختزال في الموقع ، التعليقات (0)

تطبيقات جافا للتحجيم

اليوم كنت التقليب من خلال قراءة واحدة من العروض من Zakas نيكولاس ، وتحديدا " تطبيقات جافا للتسلق العمارة ". وإن لم يكن أول ما قرأت عن هذا الموضوع ، أحببت وضوح مع نيكولاس الذي يفسر. وسأحاول لتسجيل الانطباعات التي اتخذت في قضية شخص يمكن أن يساعد.

1) نظرية وحدات

نظرية من وحدات (كما يسميها نيكولاس) يخبرنا بأن طريقة واحدة لإنشاء تطبيق قابلة للتدرج وسهلة للحفاظ على ، ويجب أن تتألف من وحدات.

ما هي وحدات؟

وحدة نمطية (من حيث لدينا) هو واحد التطبيق الذي هو جزء من كيان أكبر. كل واحد منهم لديه وظيفة فقط ، ويأخذ العناية بها.

الدولية للفضاء المحطة (انظر الصورة)

(أنا أحب هذه الصورة يعطي صورة واضحة لمعنى الوحدة.)

رمز

Core.register("hola-mundo", function(sandbox){ // Variables privadas var priv = "Privada"; // Métodos públicos return { init: function(){ try{ sandbox.console("iniciamos el módulo"); } catch(ex) { alert("No se ha encontrado sandbox"); } }, destroy: function(){ // destructor } }; }); 
وإليك مثالا على وحدة نمطية التي سجلت مع Core.register() سنرى لاحقا ، وإذا نظرتم الى شكل نرى أن المعلمة الأولى التقارير اسم الوحدة النمطية ، والثاني يحدد وظائف وحدة نمطية. هذه الدالة يتلقى كمعلمة sandbox (أكثر أيضا على ذلك لاحقا) ، وهذا ميزة سيعود كائن مع ما لا يقل عن طريقتين ( init() و destroy() ) التي تشكل الخيارات المتاحة في وحدة. init() سوف يعامل بوصفه منشئ وحدة وتستمر عندما يتم إنشاء وحدة نمطية. من ناحية أخرى destroy() يتم التعامل معه على المدمرة للوحدة تشغيل عند إزالة وحدة نمطية.

رمل

في مجال تطوير البرمجيات ودعا الصندوق الرمل لاختبار بيئة معزولة حيث خبراء في تشغيل التطبيقات. في هذه الحالة ، بناء على نفسه تقريبا ، وأن كل من الوحدات المستخدمة بيئة معزولة عن الوحدات الأخرى.

رمز

 var Sandbox = function() { var private = "Privado"; return { alert: function(str){ alert(str + private); }, console: function(str) { console.log(str); } } }; 
كما نرى في الصندوق الرمل ، وهذا هو أحد العناصر التي تقدم عددا من الطرق التي نتفاعل مع التطبيق. على سبيل المثال ، يمكن أن يستخدم للتفاعل مع دوم التطبيق باستخدام إطار شبيبة (أو لا) يمكن أن تنفذ على إصدار بسيطة وتسيطر عليها تقديم طلبات اياكس التحقق من صحة أو أشكال ،.... كل ما هو متاح من وحدات. الوحدة وينبغي أن تقلق فقط حول ما سمح الصندوق الرمل دون القلق حول ما يكمن وراءه ، مما يسهل تطوير وظائف كل وحدة.

على سبيل المثال :

 // Añadimos método notify() al Sandbox var Sandbox = function() { ...    notify: function(opt){ // Comprobaciones previas // .... $("#notify #title").text(opt.title); $("#notify #content").html(opt.content); }  ... }; // Usamos el método notify() de Sandbox desde el módulo. Core.register("hola-mundo", function(sandbox){ // Variables privadas ver ver = "1.0"; return { init: function(){ try{    sandbox.notify({ title: "Hola Mundo v." + ver, content: 'Esto es una <strong>Prueba</strong>.<br />Para mostrar el uso de módulos' }); } catch(ex) { alert("No se ha encontrado sandbox"); } }, destroy: function(){ // destructor } }; }); 
في المثال نرى أن في بداية الوحدة لنا ، ونحن استدعاء الأسلوب notify() على رمل دون القلق حول ما سيجعل من هذا الأسلوب. الأسلوب بعد سلسلة من عمليات التحقق من الصحة السابق ، إضافة مجرد عنوان ومحتوى إلى عنصر #notify باستخدام مسج. وهكذا ، فإن تصفية الصندوق الرمل الذي تم بين وحدة نمطية والإطار الذي يسعى إلى السيطرة على ما يمكن عمله حيال طلبنا.

وكور

في رأينا أعلاه متغير ( Core ) الذي يبدو أنه حجر الزاوية في كل هذا ، وهذا هو السيناريو الذي يسمح وحدات صغيرة لتسجيل والمنتسبين مثيل جديد من رمل على كل واحد منهم في كل مرة تقوم بتشغيل .
 var Core = function(){ // Variable privadas var modules = {}; // Cremos la instancia function createInstance(moduleID){ var instance = modules[moduleID].creator(new Sandbox(this)), name, method; if (!debug) { for (name in instance){ method = instance[name]; if (typeof method == "function") { instance[name] = function(name, method) { return function(){ try { return method.apply(this, arguments);    } catch(ex) { log(1, name + "(): " + ex.message);    } } } } } } return instance; } // Método públicos return { register: function(moduleID, creator) { modules[moduleID] = { creator: creator, instance: null }; }, start: function(moduleID) { modules[moduleID].instance = createInstance(moduleID); modules[moduleID].instance.init(); }, stop: function(moduleID){ var data = modules[moduleID]; if (data.instance) { data.instance.destroy(); data.instance = null; } }, startAll: function(){ for (var moduleID in modules) { if (modules.hasOwnProperty(moduleID)) { this.start(moduleID); } } }, stopAll: function() { for (var moduleID in modules) { if (modules.hasOwnProperty(moduleID)) { this.stop(moduleID); } } } }; }(); 
كما نراه هو السيناريو الصغيرة (وهذا هو الأساس ، ويمكن تمديد تبعا لاحتياجات المشروع) التي تسمح لنا لبناء وحدات نريد لكل تطبيق.

مثال

 Core.register("...", function(sandbox){}); Core.register("...", function(sandbox){}); Core.register("...", function(sandbox){}); Core.register("...", function(sandbox){}); ... // Iniciamos todos módulos Core.startAll(); 

كامل القانون

حسنا ، لنرى كل ذلك معا ، أنا خلق ملف. شبيبة حيث يمكنك ان ترى انها أكثر وضوحا .

مقالات ذات صلة

aNieto2k

لا توجد تعليقات

ترك التعليق

سمح به <a: <ahref="": الأقسام المختلفة <abbrtitle=""> title=""> <acronymtitle=""> <blockquotecite=""><cite><code><<والتاريخ والوقت = ""> <em><i><strike><strong><qcite="">

Spanish flagItalian flagKorean flagChinese (Simplified) flagChinese (Traditional) flagPortuguese flagEnglish flagGerman flagFrench flagJapanese flagArabic flagRussian flag