Adatvezérelt alkalmazások fejlesztése (AAF) - ZH- és vizsgajegyzetek
Adatelérés
ADO .NET: relációs adatbázisok kezelése
Adatelérési modell:
- Kapcsolatalapú modell: Folyamatosan fenntartunk egy kapcsolatot egy DataReader segítségével
- Kapcsolatnélküli modell: Kiolvassuk, lezárjuk a kapcsoltatot, módosítunk, visszaírjuk. DataSet segítségével
- DataAdapter: Kezeli a Connection-t, olvas, ír az adatbázisból/ba
- DataSet: Mini adatbázis, a nagytestvér másolata, amíg nincs kapcsolat
- Teljesítmény: Legkevesebb kapcsolódás
ADO .NET a gyakorlatban:
- Connection String: Az adatbázishoz csatlakozás minden információját tárolja
- ConnectionStringBuilder: Felépíti a ConnectionString-et, így nehezebb támadni
- Kapcsolódás: Connection.open();
- Command: utasítások végrehajtása
- DataReader: Csak olvasható adatlekérés
- DataAdapter: Adapter.Fill-el lehet DataSet-et feltölteni
- DataRow állapotai:
- Unchanged: változatlan
- Added: újonnan lett létrehozva
- Deleted: törlődött
- Modified: módosult
- Detached: a sor nem része egy DataRowCollection-nek
- Adat sorok verziói:
- Original: a kiindulási érték
- Current: aktuális érték
- Default: DataRowState-től függ
- Proposed: szerkesztés alatt álló érték
- DataRow állapotai:
- Tranzakciók: Connection.beginTransaction-nel visszakapunk egy Tranzakciót, ezt kell a Command-okhoz rendelni, végül commit vagy rollback
- DataSet, típusos DataSet
- DataView: DataSet-ből nézet, mely folyamatosan változik a DataSet-tel
-- sashee - 2009.06.01.
LINQ to SQL
Leképzés: Meta adatokkal
DataContext: Ezen keresztül csinálunk mindent
Lekérdezések:
- IQueryable interface:
- Expression tulajdonság
- Execute() fv
- Késleltetett lekérdezés
- A végrehajtás során egy megfelelő provider lefordítja T-SQL-é
Relációk kezelése:
- EntityRef, EntitySet: Késleltetett betöltés bejárás esetén is
- Távoli lekérdezés: Szerveren fut(alapértelmezett)
- Hely lekérdezés: Betöltjük előre
Join: Olyan táblák összekapcsolására, melyek között nincs kapcsolat
Névtelen típus: Olyan típus, melyet a fordító hoz létre, egyébként nem létezik
- select new {Név=érték,..}
- Nincs változáskövetés, mentés
Objektumok egyedisége: Ha két különböző helyen olvassuk be az adatot, akkor ugyanazt az objektumot kapjuk vissza
- Identitás táblába kerül, ahol mindig a legelőször felolvasott objektumok vannak(tehát ha felolvassa, és már létezik, akkor a felolvasottat eldobja)
- ObjectTrackingEnabled: kikapcsolható, de akkor read-only lesz
- DataContext TableAttach: Olyan objektumokat is kezel, melyeket nem ő hozott létre
Öröklés:
- Single Table Mapping(csak ezt támogatja):
- Discriminator oszlop: [Column( IsDiscriminator = true )]
- Táblához hozzá kell venni, hogy milyen értékei lehetnek a discriminatornak:
[Table] [InheritanceMapping( Code = "C", Type = typeof( Customer ) )] [InheritanceMapping( Code = "E", Type = typeof( Employee ) )] [InheritanceMapping( Code = "P", Type = typeof( PartTimeEmployee ) )] [InheritanceMapping( Code = "X", Type = typeof( Contact ), IsDefault = true )] class Contact
Módosítás:
- Change Tacking Service: Figyeli a módosításokat
- DataContext.SubmitChanges(): menti a módosításokat, egyetlen tranzakcióban
- Változások követése:
- Eredeti értékeket is tároljuk: overhead
- INotifyPropertyChanging: Ha változott, szól
- Ha mentéskor látszik, hogy módosult a rekord:
- Verziószámnak tekinthető oszlop címkézése: [Column (UpdateCheck=Always|Never||WhenChanged, IsVersion=TrueFalse)]
- ConflictMode: Beállíthatjuk, hogy az első hibánál legyen kivétel, vagy próbálja meg mindet
- Elosztott tranzakciót is készíthetünk
Tárolt eljárások:
- [StoredProcedure(..)], [Function(..)] jelölést kap az egyik metódus, [Parameter(..)]-rel paraméterezhető
- Erősen típusos visszatérési érték
Adatbázis létrehozása:
- DataContext.DatabaseExists()
- DataContext.DeleteDatabase()
- DataContext.CreateDatabase()
-- sashee - 2009.06.03.
WPF
Tulajdonságai:
- Teljeskörű integráció: 2D,3D, beszédfelismerés,...
- Felbontás független: Nincs pixel
- Hardveres gyorsítás: D3D-re épülve harveresen gyorsított, ami nem, az szoftveresen
- Deklaratív szemlélet: XAML
- Testreszabhatóság: Nem csak szöveg, hanem bármilyen Control lehet egy gombban pl,template, skin
- Egyszerű telepítés: Hagyományos, böngészőben
Architektúra:
- milcore: DirectX támogatás
- Presentation Core
- Presentation Framework
Főbb osztályok:
- System.Threading.DispatcherObject: UI objektumokat csak a létrehozó szálból lehet módosítani, ezért egy dispatcher szükséges, aminek üzeneteket lehet küldeni, ami módosítja az objektumot
- System.Windows.DependencyObject: Propertyben változás esetén másik property is változik. Lehet validálni is közben.
- System.Windows.Media.Visual: Pixelek megjelenítése a képernyőn. A Visual tree-t tartja fent, kirajzolásnál ezt járja be.
- System.Windows.UIElement: LayoutManagerek használata.
- Fázisok:
- Mesaure: Mérés, a konténer megkérdezi a komponenstől, hogy mennyi helyet fog foglalni
- Arrange: Elrendezi a gyerekeket
- Input szignál:
- Tunneling(preview fázis): Tartalmazási hierarhia csúcsától a célobjektumig
- Bubbling(tényleges fázis): Célobjektumtól felfele, ameddig nem kezelik
- Fázisok:
- System.Windows.FrameworkElement: Stílusok használata
- Explicit: Pontosan megmondjuk, hogy melyik objektumon akarjuk alkalmazni
- Implicit: Adott osztály összes példányán alkalmazzuk
- System.Windows.Control.Control: Vezérlők Visual tree-jét lehet vele átírni
XAML:
- XML leírás, deklaratív
- Tag-ek: példányosítás, attribútum: property beállítása
- Default konstruktor hívódik mindig
- Eseménykezelés: code behind
- Összetett típusú property: XML gyerek, ahol oszály.propertynév alakban lesz beállítva
- Típus konverterek: Ha nem megfelelő a típus, akkor keres egy megfelelőt, és azzal konvertál
- Markup extensions: {} jelek között, x:Null ; x:Static ; x:Binding lehet. ...=... nevesített, e nélkül nm nevesített
- Objektumok gyerekei:
- Content property: Osztályok kijelölnek egy propertyt, amelyet az XML tag gyereke fog állítani
- Kollekció elemei:
- Lista: IList-et implementálja.
- Dictionary: IDictionary-t implementálja. x:Key=... attribútuma kell legyen az elemeknek
- Típus konverzió: Content property típuskonvertere, absztakt osztály típuskonvertere
- Feldolgozása:
- Futás idejű betöltés: XamlReader.load(..), majd FindName-vel lehet gyerekeket(x:Name)
- Partial class: c:Class
- BAML: bináris
- .g.cs: osztály, betölti a BAML-t, elvégzi az összerendeléseket, feliratkozik az eseményekre
- Procedurális kód XAML-ben: kerüljük
- .NET osztály elérése XAML-ből
WPF belülről:
- Logikai és vizuális fa
- Dependencz property
- Változás értesítés
- Érték öröklés
- Attached property: Gyerekelemek property-jeinek a beállítása
- Routed events: Felefele áramlanak az események, amíg el nem kapjuk
- Attached event: Olyan eseményekre is felírhatjuk az elemet, amelyet nem dobhat, de akkor az összes gyere által dobott adott eseményt megkapja
WPF controllok:
- Content control: Egyetlen gyerekük lehet
- Button, RepeatButton, ToggleButton, CheckBox, RadioButton
- Label, Tooltip, Frame
- GroupBox, Expander
- Items Control: Tetszőleges mennyiségű gyerekük lehet
- Range Control: Előre megadott számérték közötti számértéket jelenítenek meg
- Text Control: TextBox, RichTextbox, PasswordBox
Méretezés, pozícionálás, transzformálás:
- Méret:
- Width, Height
- Margin, Padding
- Visibility
- Pozicionálás:
- Alignment
- Content alignment
- Transzformációk:
- LayoutTransform: Elrendezés meghatározása előtt
- RenderTransform: Után
Elrendezések Panelek segítségével:
- Canvas: Abszolút pozicionálás
- StackPanel: Függőlegesen/vízszintesen folytonosan
- WrapPanel: Ha sok, akkor következő sor
- DockPanel: Egyes oldalakhoz köthetjük
- Grid: Táblázatos
Adatkötés: Két property értékének az összekötése
- {Binding ElementName=.. Path=}
- {Binding RelativeSource={RelativeSource Self}}
- {Binding RelativeSource={RelativeSource TemplatedParent}}
- {Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type
desiredType}}}
- {Binding RelativeSource={RelativeSource AncestorType={x:Type desiredType}}}
- {Binding RelativeSource={RelativeSource PreviousData}}
- Kötés kollekcióhoz
- Adat konvertálás
Erőforrások
- Bináris erőforrások
- Logikai erőforrások
Style, Control Template:
- Style: propertyket összefog, hogy később együtt tudjuk beállítani őket
- Control template: Control Visual tree-jének beállítása
-- sashee - 2009.06.01.
Adattárházak
Alaptulajdonságok:
- Időfüggő: Megállapítható, mely időponthoz van az adat kötve
- Változatlan: Nincs update
- Tematikus: Nem tartalmazzák az összes adatot, csak amelyikre szükség van
- Integrált: Központian tárol
OLTP és adattárház összehasonlítása:
- Elsődleges cél:
- Aktuális adatok feldolgozása
- Döntéstámogatás
- Felhasználók:
- Ügyintézők
- Menedzsment
- Terhelés jellege:
- Egyszerű lekérdezés, adatmódosítás
- Összetett lekérdezés
- Jellemző mérőszám:
- Feldolgozott tranzakciók száma
- Lekérdezésre adott válasz ideje
Architektúrák:
- Kétrétegű: A felhasználók közvetlenül az adattárházhoz kapcsolódnak, ami az OLTP-ből nyeri az adatokat
- Háromrétegű: A felhasználók adatpiacokhoz(data mart) férnek hozzá, ahol tematikusan kiválasztott részek és származtatott adatok vannak
Adattárház építésének lépései:
- Adatok kinyerése: Milyen adatokra van szükség, hogyan érjük el(ha pl. nem relációs)
- Tisztítása:
- Hiányzó adat kezelése
- Teljes rekord elvetése
- A hiányzó adat bekérése.
- A hiányzó adat helyettesítése
- Konstans értékkel
- Átlagértékkel
- Csoportra jellemző átlagértékkel
- Legvalószínűbb értékkel
- Zajszűrés:
- Numerikus adatok zajszűrése:
- Binning: minden k számú elemcsoportot helyettesít az átlagával
- Csoportképzés: Több attribútum együttes előfordulását vizsgálják, majd az egymás közelében elhelyezkedő adatokat a csoportot jellemző adatokkal helyettesítjük (csoport súlypontjával)
- Regresszió: Ebben az esetben is több attribútum együttes előfordulását vizsgáljuk, az egyes attribútumok közt valamilyen függvénykapcsolatot keresünk (általában lineárisat), majd az egyes értékeket a regressziós függvény értékeivel helyettesítjük.
- Szöveges adatok:
- Szótár alapú
- Klaszterező: Hash fv-vel számokká képezzük le
- Numerikus adatok zajszűrése:
- Hiányzó adat kezelése
- Transzformálása: Az adatok az adattárház egységes sémájára történő leképzés
- Rekord szintű:
- Kiválasztás
- Összekapcsolás
- Mező szintű: Típuskonverzió
- Algoritmikus
- Lekérdezéssel
- Rekord szintű:
- Betöltése és indexelése: Pillanatkép és histórikus adatok
Multidimenzionális adatmodell:
- Alapelemei:
- Dimenziós adatok: Ezen adatok mentén történik az elemzések végrehajtása
- Hierarchiaszintek: Felbontás
- Tényadatok: Amit elemzünk
- Sémák:
- Csillag: A tényadatokat tartalmazó táblához idegen kulcsokkal csatlakoznak a dimenziós tánlák
- Hópehely: A tényadatokhoz csak a legalacsonyabb hierarchiaszint van csatolva, és ahhoz van a többi, így joinolni kell.
OLAP(Online Analytical Processing) rendszerek:
- FASMI(Fast Analysis of Shared Multidimensional Information) teszt:
- Fast: Gyors
- Analysis: A felhasználó számára szükséges üzleti és statisztikai elemzések elkészítésére alkalmas.
- Shared: Megosztott
- Multidimensional
- Information: Összes adat és származtatott adat elérhető
OLAP kocka:
- Dimenzió: A kocka élei
- Hierarchia: Elvégezhető elemzések mélysége
- Aggregátum: Származtatott mennyiségek
OLAP kocka műveletek:
- Szeletelés: 1 érték rögzítése, a diemnziószám csökken
- Részkocka kiválasztása: Értékek megkötése
- Lefúrás: Hierarchiaszint csökkentése
- Felfelé görgetés: hierarchiaszint növelése
- Forgatás: A megjelenített eredményt elforgatja
OLAP kocka tárolása:
- ROLAP: Relációs
- MOLAP: Saját, multidimenziós
- HOLAP: Hibrid
Előkalkuláció mértéke: Ne legyen túl nagy, se túl kicsi
-- sashee - 2009.06.02.
Entity Framework
EDM (Entity Data Modell):
- Conceptual Schema Definition Language (CSDL)
- Store Schema Definition Language (SSDL)
- Mapping Specification Language (MSL)
- Működés
- ObjectContext
- Adattár -> Store Providers -> Entity Provider -> Object Services
Lekérdezési lehetőségek:
- Entity SQL + Object Services
- Ha LINQ-nél nagyobb kifejezőerőre van szükség
- Ha dinamikusan összeállított lekérdezésekre van szükség
- Ha a teljesítmény nagyon fontos
- Entity SQL + Entity Client
- Az adatokat sorban (streamelve) szeretnénk lekérdezni
- Meglévő alkalmazások átírásakor
- LINQ to Entities
- Minden más esetben
ORM leképezési lehetőségek EF-ben:
- TPH (Table Per Hierarchy)
- Minden osztály egy táblába
- EDM designer támogatja
- TPT (Table Per Type)
- Minden osztály külön táblába (az absztraktak is)
- EDM designer támogatja
- TPC (Table Per Class)
- Minden valós osztály külön táblába (az absztraktak nem)
- EDM designer nem támogatja
Egyéb szolgáltatások:
- Komplex típusok használata
- DefiningQuery
- Lazy loading
- Tárolt eljárások hívása
Asszociáció típusok:
- Külső kulcsos asszociáció
- Független asszociácó
- A több-több kapcsolatat mindig ezzel valósítjuk meg
- Mindig van navigation property
Változáskövetés:
- Eredeményhalmazok összefűzése
- NoTracking
- AppendOnly
- OverwriteChanges
- PreserveChanges
- EntityState
- Detached
- Unchanged
- Added
- Deleted
- Modified
- Entitás típusok
- Entity object leszármazott
- Automatikus változáskövetés
- Lazy loading támogatás
- Hátránya, hogy nem tudunk csak az EntityObjectből származtatni
- POCO
- Nincs automatikus változáskövetés, a DetectChanges metódust kell hívni
- Nincs lazy loading támogatás
- POCO proxy
- Automatikus változáskövetés
- Lazy loading támogatás
- Futási időben leszármaztat az osztályunkból, így tudja biztosítani a fenti szolgáltatásokat, ezért speciális követelmények vonatkoznak a POCO osztályunkra
- Self-Tracking Entities
- nem függ az EF-től
- Tulajdonképpen ez egy csináld magad megoldás, ugyanazt implementáljuk, mint amit az EF tud
- Entity object leszármazott
- SaveChanges
Két és többrétegű alkalmazások:
- Kétrétegű
- Az entitások nem hagyják el az OC alkalmazástartományát (nincs sorosítás)
- Az állapotkezelést az OC megoldja ha a funkciók kompaktak (például egy dialógus ablak)
- Többrétegű alkalmazás
- Az entitás kikerül az OC alkalmazástartományából
- Az állapotkövetés nem bízható az OC-ra
- A változásokat az OC tudomására kell hozni
-- KoviBalu - 2011.06.04.