ugrás a tartalomhoz

Alkalmazás környezet kialakítása - 2. rész

s_volenszki · 2008. Szep. 17. (Sze), 11.42
Sziasztok!

Azért neveztem el a témát ugyan úgy, mint az előzőt, hiszen az ott tőletek kapott információk alapján terelgetem tovább a gondolatmenetet.

Ezidáig volt szerencsém két könyvet megvenni (Program tervezés, Program tervezési minták) és kicsi időm az egyiket átolvasni (a tervezési mintákba csak belelapoztam, de gyűröm) a témához kapcsolódóan (köszönöm az ajánlásokat) és némileg helyrekerültek az alapfogalmak.

Úgy vélem, hogy célkitűzéseim tekintetében számomra az "Adatfolyam tervezés" nyújthat megoldást. Egyezik az elképzelésemmel, miszerint olyan ömálló működö egységeket hozok létre, amelyek egy bemenettel és egy kimenettel rendelkeznek. Könnyen újrahasznosítható, kezelhető, hibakereshető és fejleszthető egy ilyen rendszer.

Nézegettem azokat a keretrendszereket amiket ajánlottatok, és éppen tegnap éjjel jutottam el odáig, a CodeIgniter értelmezésében (számomra ennek tűnik az online doksi-ja bőségesnek és sok hozzá a tutorial), hogy elkezdtem látni benne a potenciált. Az, hogy egy kiegészítővel az adatbázist néhány beállítás után Read, Write, Update éd Delet parancsokkal műveltethetem teljes tranzakció kezeléssel, escape-eléssel ez fantasztikus! Csak ez letizedeli a programozásra fordítandó időt.

Ennek ellenére valahogy nem érzem a megoldás értékét. Biztos a szemléletemben vagy a tudás hiányomban van a hiba, de én, aki ezidáig struktúrált kódokat készítettem, ráadásul úgy, hogy jellemzően több a kliens oldali script-em mint a szerver oldali, teljesen elveszettnek érzem magam egy CodeIgniter-ben.

Tudtok nekem szakirodalmat ajánlani, úgy, hogy a következők a célkitűzéseim:

- Hogyan kell Adatfolyam tervezésre épülő programtervet lekódolni (sablonrendszerre, vagy technikára gonolok)
- Kliens oldali kiosztott események (ternészetesen az első részben javasolt szakirodalmaz is figyelembe vettem)
- Esetleg tanfolyamot, vagy valakit, aki egy kis forintért e-tréninget tartana nekem?

s_volenszki
 
1

Kliens oldali kiosztott események

toxin · 2008. Szep. 18. (Cs), 09.21
Programtervezési minták c. könyv: Közvetítő mintája 277.oldaltól, próbáltam a legegyszerűbben megvalósítani, alap javascript, proto-s öröklődés nélkül, ha megmondod melyik framework-be kell, megnézzük ott is, próbáltam kommentezni, remélem világos. Alapelve, hogy fogunk egy objektumot annak egy attribjába beledobáljuk az eseményzkezelőket, majd visszahívjuk őket az esemény ellövésekor.
  1. /** 
  2.  * Lehetővé teszi saját eseményekre történő feliratkozást 
  3.  * ill. előbbi események paraméterezett,elindítást            
  4.  */  
  5. var EventRouter = {  
  6.     // a feliratkozott eseménykezelőket tároljuk  
  7.     _registered : [],  
  8.       
  9.     /** 
  10.      * Egy esemény ill. a reá feliratkozott eseménykezelők elindítása 
  11.      * @param {Object} _source 
  12.      * @param {String} _event 
  13.      * @param {Array} _params 
  14.      */  
  15.     fireEvent : function(_source,_event,_params){  
  16.         //végigiterálunk a feliratkozott eseménykezelők között  
  17.         for (var i=0;i<this._registered.length;i++){  
  18.             // ha annak az objektumnak az eseményeire voltunk kiváncsiak  
  19.             // ami eseményt elindította                   
  20.             if (_source.getName() == this._registered[i].aspect){  
  21.                 // meghívjuk az eseménykezelőt  
  22.                 this._registered[i].func.apply(  
  23.                     this._registered[i].context,  
  24.                     // push modell, tehát a feliratozottnak átadunk mindent   
  25.                     // amire esetleg kíváncsi lehet, vs. pull modell ahol  
  26.                     // az eseménykezelőnek kéne összegyűjteni a lefutásához  
  27.                     // szükséges információkat  
  28.                     [_source,_event,_params]  
  29.                 );  
  30.             }  
  31.         };  
  32.     },  
  33.       
  34.     /** 
  35.      * Feliratkozás egy adott objektum általi eseményekre, szükséges 
  36.      * az, hogy melyik objektumra eseményeire vagyunk kíváncsiak, 
  37.      * maga az eseménykezelő, ill. az eseménykezelő leendő kontextusa 
  38.      * @param {String} _aspect 
  39.      * @param {Function} _func 
  40.      * @param {Object} _context 
  41.      */  
  42.     subsrcibe : function(_aspect,_func,_context){  
  43.         this._registered.push({  
  44.             aspect  : _aspect,  
  45.             func    : _func,  
  46.             context : _context                        
  47.         });  
  48.     }                 
  49. };  
  50.   
  51. /** 
  52.  * Objektum aminek az eseményeire feliratkozunk 
  53.  */  
  54. var FooA = {  
  55.     // EventRouternek kell lásd fent  
  56.     _name       : "FooA",  
  57.     getName     : function(){return this._name},  
  58.       
  59.     // ellőjük az eseményeket  
  60.     fireSomeEvents : function(){  
  61.         // forrásobjektum, aktuális esemény nevének, és a paraméterek átadása  
  62.         EventRouter.fireEvent(this,"fooEventA",{  
  63.             paramA: "FooA:A",  
  64.             paramB: "FooA:B"  
  65.         });  
  66.         EventRouter.fireEvent(this,"fooEventB",{  
  67.             paramA: "FooA:C",  
  68.             paramB: "FooA:D"  
  69.         });  
  70.     }  
  71. };  
  72.   
  73. /** 
  74.  * A fenti objektum által indított eseményekre feliratkozottt objektumok 
  75.  */  
  76. var FooB = {  
  77.                       
  78.     initialize  : function(){  
  79.         // push modell, mindent amire szükség van az esemény lekezelésére  
  80.         // az eseménykezelő: EventRouter átadja                   
  81.         EventRouter.subsrcibe("FooA",function(_source,_event,_params){  
  82.             if (_event == "fooEventA"){  
  83.                 this.onFireEventA(_params);  
  84.             };  
  85.             if (_event == "fooEventB"){  
  86.                 this.onFireEventB(_params);  
  87.             }  
  88.         },this);  
  89.     },  
  90.     // kiírjuk az esemény elindítójától kapott paraméterekt   
  91.     onFireEventA : function(params){  
  92.         for (var param in params){  
  93.             alert(this._name + ":" + params[param]);  
  94.         };  
  95.     },  
  96.       
  97.     onFireEventB : function(params){  
  98.         for (var param in params){  
  99.             alert(this._name + ":" + params[param]);  
  100.         };  
  101.     }                 
  102. };  
  103.   
  104. // mint a fenti objektum, ő is feliraktkozott FooA objektum, eseményeire,  
  105. // de csak fooEventA-t kezeli le  
  106. var FooC = {  
  107.       
  108.     _name       : "FooC",  
  109.     getName     : function(){return this._name},  
  110.       
  111.     initialize  : function(){                     
  112.         EventRouter.subsrcibe("FooA",function(_source,_event,_params){  
  113.             if (_event == "fooEventA"){  
  114.                 this.onFireEvent(_params);  
  115.             };                        
  116.         },this);  
  117.     },  
  118.       
  119.     onFireEvent : function(params){  
  120.         for (var param in params){  
  121.             alert(this._name + ":" + params[param]);  
  122.         };  
  123.     }                         
  124. };            
  125.   
  126. FooB.initialize();FooC.initialize();  
  127. FooA.fireSomeEvents();  
üdv Csaba

ui: próbáltam utánanézni melyik framework tud ilyet alapból, az új YUI3 igen, meg majd még keresgélek : http://developer.yahoo.com/yui/3/event/#customevent
2

Köszi!

s_volenszki · 2008. Szep. 18. (Cs), 14.51
Szia Csaba!

Köszi a hozzászólást felettéb érdekes. A hétvégén átrágom magam ezen a könyvön! Elképzelhetőnek tartod, hogy tanulásomban (privátban) segitségemre leszel?

s_volenszki