EAF 4 ESETTANULMNY Apartman kezel rendszer implementlsa A

  • Slides: 40
Download presentation
(E)AF 4 – ESETTANULMÁNY Apartman – kezelő rendszer implementálása (A nyugalom megzavarására alkalmas kép-

(E)AF 4 – ESETTANULMÁNY Apartman – kezelő rendszer implementálása (A nyugalom megzavarására alkalmas kép- és szöveganyagot tartalmaz, így megtekintése csak saját felelősségre történhet!) Írta: Kátai Kornél Bálint, 2007 Mail: kkb@inf. elte. hu

Technológiák Közvetlen VS Kapcsolat nélküli munka Pro: típusos, oo, általános, támogatott, elkülönülő db logikai

Technológiák Közvetlen VS Kapcsolat nélküli munka Pro: típusos, oo, általános, támogatott, elkülönülő db logikai réteg… Kontra: nem célrendszer (xml struktúra), speciális igények esetén körülményes, erőforráspazarló

Az esettanulmányról „Apartman kezelő rendszer…” Ø Adatbázis alapú Ø Kapcsolt táblák Ø Táblák szűrése

Az esettanulmányról „Apartman kezelő rendszer…” Ø Adatbázis alapú Ø Kapcsolt táblák Ø Táblák szűrése Ø Táblák editálása Ø Táblák validálása Ø Táblák megjelenítése Ø Megjelenítés külső adatforrások alapján

Az alkalmazásról � � � 2 assembly 20 saját forrásfájl 4440 saját kódsor Szeparált

Az alkalmazásról � � � 2 assembly 20 saját forrásfájl 4440 saját kódsor Szeparált kód Absztrakt megoldások Sok forrásfájl, még több osztály Dokumentáció !

Ok. , de miről lesz szó? ?

Ok. , de miről lesz szó? ?

Az előadás témája: Ø Adatkapcsolat létrehozása Ø Kapcsolt táblák megjelenítése Ø Adatkötések használata

Az előadás témája: Ø Adatkapcsolat létrehozása Ø Kapcsolt táblák megjelenítése Ø Adatkötések használata

Az adatbázis s dé ö k ű sm o n á l a t

Az adatbázis s dé ö k ű sm o n á l a t Az ál : a kulcs K Ó I C Á L RE

Adatkapcsolat létrehozása 1

Adatkapcsolat létrehozása 1

Az adatkapcsolat létrehozása 2 Ø Ø Típusspecifikus adatforrás (dataset) DB szerver - kliens specifikus

Az adatkapcsolat létrehozása 2 Ø Ø Típusspecifikus adatforrás (dataset) DB szerver - kliens specifikus beállítások (app. config)

Adatkapcsolat létrehozása 3 A dataset kiegészítése fel- és letöltő metódusokkal!

Adatkapcsolat létrehozása 3 A dataset kiegészítése fel- és letöltő metódusokkal!

Számított mező hozzáadása � A lokális adatstruktúra (dataset) kiegészítése!

Számított mező hozzáadása � A lokális adatstruktúra (dataset) kiegészítése!

Dataset használata

Dataset használata

Dataset feltöltése � A dataset forráskódjában implementáltuk! Hol tartunk? ? ? • Létrejött a

Dataset feltöltése � A dataset forráskódjában implementáltuk! Hol tartunk? ? ? • Létrejött a kapcsolat az adatbázissal. • Létrejött a típusspecifikus dataset a kapcsolat nélküli adattároláshoz. • Kiegészítettük a dataset –et számított mezővel. • A dataset forráskódjában implementáltuk a fel- és letöltéshez szükséges metódusokat. • A main form konstruktorában feltöltöttük a dataset –et az adatbázisban található adatokkal.

Az Appartment-Library � � Az általános célú és specifikus osztályok elkülönítése külön assembly -be

Az Appartment-Library � � Az általános célú és specifikus osztályok elkülönítése külön assembly -be Library – „osztálykönyvtár” – egy dll –be fordított osztálycsomag

Az Appartment-Library � Függőségek ellenőrzése!

Az Appartment-Library � Függőségek ellenőrzése!

A Join probléma � � � = Kapcsolt táblák megjelenítése, karbantartása Primary key –

A Join probléma � � � = Kapcsolt táblák megjelenítése, karbantartása Primary key – Foreign key relációk. NET FW –nek voltak kezdeti próbálkozásai, de mára kikerült a keretrendszerből

Az adatmegjelenítés problémája Adatkapcsolások egyedi azonosítók mentén történnek, DE a megjelenítésnél elvárható informálisabb alakra

Az adatmegjelenítés problémája Adatkapcsolások egyedi azonosítók mentén történnek, DE a megjelenítésnél elvárható informálisabb alakra hozni. (Value. Member – Display. Member) A megjelenítő control –tól elvárható, hogy dinamikusan kezelje az adatforrását. (Data binding)

Join probléma megoldása Cél: adott bázistábla ‘n’ mélységű kiterjesztése relációk mentén

Join probléma megoldása Cél: adott bázistábla ‘n’ mélységű kiterjesztése relációk mentén

A Joined. Table osztály Ø Ø Ø Data. Table osztályból származtatjuk Szükséges: mezőleíró és

A Joined. Table osztály Ø Ø Ø Data. Table osztályból származtatjuk Szükséges: mezőleíró és bejárást segítő struktúrák Inicializáció (Columns), adatfeltöltés (Rows)!

Joined. Table - inicializáció � � � Mélységi bejárás Rekurzív metódus: Add. Parent. Columns

Joined. Table - inicializáció � � � Mélységi bejárás Rekurzív metódus: Add. Parent. Columns Aggregation – Column -> Column. Info (base, relation, parent relation)

Joined. Table: adatfeltöltés � � � Aggregate tábla miatt lineáris műveletigényű. Relation: Child Column

Joined. Table: adatfeltöltés � � � Aggregate tábla miatt lineáris műveletigényű. Relation: Child Column <-> Parent Row egyértelmű leképezés A relációmélységek rendezettek -> elég az utolsó kettő ismerete!

Joined. Table – bővítések 1 � Állapotmentés implementációja Erőforrás megtakarítás (szűrés) � Row state

Joined. Table – bővítések 1 � Állapotmentés implementációja Erőforrás megtakarítás (szűrés) � Row state loss! -> csak megjelenítésre alkalmas �

Join. Table – bővítések 2 � Név parse –olás � � Base Table column

Join. Table – bővítések 2 � Név parse –olás � � Base Table column – Join Table column névmegfeleltetés Helyben szűrés � Szűrés eredménye: Data. Row[]

Az adatmegjelenítés problémájának megoldása Ø ADO. NET technológiai eszköz: Bindable („köthető”) objektumok, valamilyen data

Az adatmegjelenítés problémájának megoldása Ø ADO. NET technológiai eszköz: Bindable („köthető”) objektumok, valamilyen data source („adatforrás”) objektumhoz kötve dinamikus adatkezelést valósít meg Ø Tipikus adatforrások: Ø Ø Data. Table Ø Array Ø Enum … Ø Speciális adatforrás: Binding. Source Ø Kiterjesztett funkcionalitás

Megoldás: általános megjelenítő control � Cél: � adatkötések � típusfüggő � oszlopok használata megjelenítés

Megoldás: általános megjelenítő control � Cél: � adatkötések � típusfüggő � oszlopok használata megjelenítés rendezése � szerkeszthetőség � hibakezelés

Table. Display. Ctrl - felépítés � � User. Control osztályból származik Alapvetően egy Data.

Table. Display. Ctrl - felépítés � � User. Control osztályból származik Alapvetően egy Data. Grid és egy Binding. Navigator control példányból áll

Table. Display. Ctrl - mezők � Egy mezőt (az adatforráson belül) a következő tulajdonságok

Table. Display. Ctrl - mezők � Egy mezőt (az adatforráson belül) a következő tulajdonságok írnak le: Mezőnév � Hozzá tartozó felirat � Mezőtípus � Megjelenítendő -e �

Table. Display. Ctrl - inicializáció � � A definiált mező – leíró osztályunk, a

Table. Display. Ctrl - inicializáció � � A definiált mező – leíró osztályunk, a Grid. Column. Info osztály alapján Általános

Gyorsteszt, avagy mit is csináltunk eddig? � Drag&Drop a tesztelő Form –ra n á

Gyorsteszt, avagy mit is csináltunk eddig? � Drag&Drop a tesztelő Form –ra n á t u ás t í d !!! r o f eg k m a Cs enik jel

Gyorsteszt - kód � Csupán használjuk az implementált metódusokat!

Gyorsteszt - kód � Csupán használjuk az implementált metódusokat!

Gyorsteszt – eredmény � Láthatóvá váltak a már említett problémák! Tábla kapcsolás: Foreign Key

Gyorsteszt – eredmény � Láthatóvá váltak a már említett problémák! Tábla kapcsolás: Foreign Key Szeretnénk: Name

Gyorsteszt - Joined. Table � Módosítsuk a kódot, az adatforrásunk legyen Joined. Table! �

Gyorsteszt - Joined. Table � Módosítsuk a kódot, az adatforrásunk legyen Joined. Table! � Oszlopnevek! Statikus metódus!

Gyorsteszt – Joined. Table eredmény � Akármelyik ‘city’ táblában található mezőt megjeleníthetjük! Hátrány: a

Gyorsteszt – Joined. Table eredmény � Akármelyik ‘city’ táblában található mezőt megjeleníthetjük! Hátrány: a Joined. Table –t úgy terveztük, hogy csak megjelenítést szolgáljon!

Gyorsteszt – adatkötés � Bevett gyakorlat, a Join. Table nélüli kódot egészítjük ki! …

Gyorsteszt – adatkötés � Bevett gyakorlat, a Join. Table nélüli kódot egészítjük ki! … Az aktuális mező értékét új objektumhoz kötöttük. Általánosan működik tetszőleges objektum – kollekcióra. A Value. Member és Display. Member a tetszőleges objektum két tetszőleges property –je.

Gyorsteszt – adatkötés eredmény � � Egyetlen mezőre ugyanaz az eredmény, mint a Joined.

Gyorsteszt – adatkötés eredmény � � Egyetlen mezőre ugyanaz az eredmény, mint a Joined. Table esetben, DE Ez a megoldás editálható, mivel csupán a megjelenítés változott, az adattag továbbra is a Foreign key! Ugyanaz a probléma, de most az adatforrás felsorolási típus.

Gyorsteszt – Enum � Cél: hasonló módon, adatkötéssel megoldani a problémát. A megoldást tehát

Gyorsteszt – Enum � Cél: hasonló módon, adatkötéssel megoldani a problémát. A megoldást tehát ilyen implementációval keressük: Generikus („sablon”) metódus. Feladata: készíteni egy olyan objektum kollekciót, amelynek minden bejegyzése rendre megfelel a felsorolási típus egy-egy elemének ÉS az objektumok tartalmaznak egy Key és egy Value property –t.

Gyorsteszt – Enum adatkötés megvalósítása � � A Dictionaty. Entry osztály példányai rendelkeznek a

Gyorsteszt – Enum adatkötés megvalósítása � � A Dictionaty. Entry osztály példányai rendelkeznek a két kívánt property –vel. Value legyen a felsorolási típus aktuális elemének értéke, Display pedig a Description Tag –je, ha van, ha nincs, akkor a neve.

Gyorsteszt – Enum eredmény � Teljesítettük a feladatot: � Létrehoztuk az adatkapcsolatot � Általánosan

Gyorsteszt – Enum eredmény � Teljesítettük a feladatot: � Létrehoztuk az adatkapcsolatot � Általánosan megvalósítottuk a kapcsolt táblát � Adatkötéssel általánosan megvalósítottunk egy megjelenítő control –t

Következő alkalommal, avagy mi várhat ránk ezek után? . . . � Szűrt táblák

Következő alkalommal, avagy mi várhat ránk ezek után? . . . � Szűrt táblák létrehozása � Táblakarbantartás � Hibakezelés & validálás

The END!

The END!