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

A VIK Wikiből
A lap korábbi változatát látod, amilyen Szikszayl (vitalap | szerkesztései) 2014. április 4., 23:07-kor történt szerkesztése után volt.


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.