Adatvezérelt alkalmazások fejlesztése (AAF) - ZH- és vizsgajegyzetek
Ez az oldal a korábbi SCH wikiről lett áthozva.
Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!
Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.
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 ugyan azt 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
- Hierarchia szintek: Felbontás
- Tény adatok: Amit elemzünk
- Sémák:
- Csillag: A tény adatokat tartalmazó táblához idegen kulcsokkal csatlakoznak a dimenziós tánlák
- Hópehely: A tény adatokhoz csak a legalacsonyabb hierarchia szint 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
- Hierarhia: 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: Hierarhia szint csökkentése
- Felfelé görgetés: hierarhia szint 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.