Adatvezérelt alkalmazások fejlesztése (AAF) - ZH- és vizsgajegyzetek

A VIK Wikiből
A lap korábbi változatát látod, amilyen Harapeti (vitalap | szerkesztései) 2014. március 30., 14:46-kor történt szerkesztése után volt. (Felesleges, hogy külön-külön lapokra kelljen kattintgatni a jegyzetekhez, úgyhogy ömlesztve a következő lapok: AafjegyzetLinqToSql, AafjegyzetWPF, AafjegyzetAdattarhazak, AafjegyzetEF)


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
  • 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
  • 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
  • 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
  • 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
  • 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.