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.
            /**
             * Lehetővé teszi saját eseményekre történő feliratkozást
             * ill. előbbi események paraméterezett,elindítást			 
             */
            var EventRouter = {
                // a feliratkozott eseménykezelőket tároljuk
                _registered : [],
                
                /**
                 * Egy esemény ill. a reá feliratkozott eseménykezelők elindítása
                 * @param {Object} _source
                 * @param {String} _event
                 * @param {Array} _params
                 */
                fireEvent : function(_source,_event,_params){
                    //végigiterálunk a feliratkozott eseménykezelők között
                    for (var i=0;i<this._registered.length;i++){
                        // ha annak az objektumnak az eseményeire voltunk kiváncsiak
                        // ami eseményt elindította					
                        if (_source.getName() == this._registered[i].aspect){
                            // meghívjuk az eseménykezelőt
                            this._registered[i].func.apply(
                                this._registered[i].context,
                                // push modell, tehát a feliratozottnak átadunk mindent 
                                // amire esetleg kíváncsi lehet, vs. pull modell ahol
                                // az eseménykezelőnek kéne összegyűjteni a lefutásához
                                // szükséges információkat
                                [_source,_event,_params]
                            );
                        }
                    };
                },
                
                /**
                 * Feliratkozás egy adott objektum általi eseményekre, szükséges
                 * az, hogy melyik objektumra eseményeire vagyunk kíváncsiak,
                 * maga az eseménykezelő, ill. az eseménykezelő leendő kontextusa
                 * @param {String} _aspect
                 * @param {Function} _func
                 * @param {Object} _context
                 */
                subsrcibe : function(_aspect,_func,_context){
                    this._registered.push({
                        aspect	: _aspect,
                        func 	: _func,
                        context	: _context						
                    });
                }				
            };
            
            /**
             * Objektum aminek az eseményeire feliratkozunk
             */
            var FooA = {
                // EventRouternek kell lásd fent
                _name 		: "FooA",
                getName		: function(){return this._name},
                
                // ellőjük az eseményeket
                fireSomeEvents : function(){
                    // forrásobjektum, aktuális esemény nevének, és a paraméterek átadása
                    EventRouter.fireEvent(this,"fooEventA",{
                        paramA: "FooA:A",
                        paramB: "FooA:B"
                    });
                    EventRouter.fireEvent(this,"fooEventB",{
                        paramA: "FooA:C",
                        paramB: "FooA:D"
                    });
                }
            };
            
            /**
             * A fenti objektum által indított eseményekre feliratkozottt objektumok
             */
            var FooB = {
                                
                initialize	: function(){
                    // push modell, mindent amire szükség van az esemény lekezelésére
                    // az eseménykezelő: EventRouter átadja					
                    EventRouter.subsrcibe("FooA",function(_source,_event,_params){
                        if (_event == "fooEventA"){
                            this.onFireEventA(_params);
                        };
                        if (_event == "fooEventB"){
                            this.onFireEventB(_params);
                        }
                    },this);
                },
                // kiírjuk az esemény elindítójától kapott paraméterekt 
                onFireEventA : function(params){
                    for (var param in params){
                        alert(this._name + ":" + params[param]);
                    };
                },
                
                onFireEventB : function(params){
                    for (var param in params){
                        alert(this._name + ":" + params[param]);
                    };
                }				
            };
            
            // mint a fenti objektum, ő is feliraktkozott FooA objektum, eseményeire,
            // de csak fooEventA-t kezeli le
            var FooC = {
                
                _name		: "FooC",
                getName		: function(){return this._name},
                
                initialize	: function(){					
                    EventRouter.subsrcibe("FooA",function(_source,_event,_params){
                        if (_event == "fooEventA"){
                            this.onFireEvent(_params);
                        };						
                    },this);
                },
                
                onFireEvent : function(params){
                    for (var param in params){
                        alert(this._name + ":" + params[param]);
                    };
                }						
            };			
            
            FooB.initialize();FooC.initialize();
            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