Apr 05, 2015
Marcel Gnoth, www.gnoth.net
Zur PersonDipl. Inf. Marcel Gnoth, MCSD
www.gnoth.net Code und Powerpoint auf der Webseite
NTeam GmbH, Berlinwww.nteam.de IT – Infrastruktur, BI, Entwicklung
Senior Consultant, Trainer, Programmierer
Autor dotnet magazin und dotnetproVB6, COM, DatenbankenVerteilte InformationssystemeUnd ....
.Net
Marcel Gnoth, www.gnoth.net
Agenda
Teil 1 Einordnen der Datasets
Teil 2Einige praktische Betrachtungen
Teil 1
Das Dataset sucht seinen Platz
Marcel Gnoth, www.gnoth.net
Physische ArchitekturenTier -> Schichtdie gute alte Zeit ...Client / Server3 – Tier und jetzt noch der
WebserverZugriff auf externe
Systeme
Arbeitsstation Arbeitsstation
Server
Daten
Arbeitsstation Arbeitsstation
Daten
Arbeitsstation Arbeitsstation
Webserver
Daten
Geschäftskomponenten
Marcel Gnoth, www.gnoth.net
Semantisch Architekturen
Fat ClientsAufteilung in Dienste vertikaler Zugriff -> LayerAufteilung in Komponenten,
Kapselung von FunktionalitätAufteilung:
GUIObjekte (Business Logic)Datenbank
COM
Windows Form
COM
COM
Daten
Marcel Gnoth, www.gnoth.net
Die Geschäfts Logik
Objektmodell EigenschaftenMethoden
Dann kam MTS / COM+statuslose Objekte keine Eigenschaften, nur Methoden
Marcel Gnoth, www.gnoth.net
Was ist schlecht an Status...... in der Mittelschicht ??wenn viele Clients Bindung von Ressourcen auf dem
Server zwischen den Methodenaufrufen ThreadsSpeicherServerfarmen werden schwierig, Server
muß Status des Client wieder finden
Marcel Gnoth, www.gnoth.net
Vier Layer / drei TierTrennung von Bearbeitung
und DarstellungUserAgent in eigene DllObjekte haben Status
Komponenten: .Net EnterpriseServices oder Webservicesmöglichst kein Status,
schlecht für SkalierbarkeitTiers können auf dem selben
Computer laufen
WebserviceCOM+
Data
User Agent
Windows Form
Marcel Gnoth, www.gnoth.net
Modell / View / Controller
altes Design PatternDaten mit denen etwas gemacht wird
passiv, überwiegend EigenschaftenVerschiedene Ansichten auf Daten
(View)Winword (Normal, Seite, Gliederung)Powerpoint
Controllertut etwas mit den Daten überwiegend Methodenkein Status
Marcel Gnoth, www.gnoth.net
Realisierung des MVC-Pattern
Business Logic
Data
Windows Form
User Agent
View
Modell
Contr.
Marcel Gnoth, www.gnoth.net
Warum Controller aufgeteiltUserAgent besorgt Daten für Client, hat
technischen StatusGeschäftslogik
Verarbeitet Daten und liefert ErgebnisseKommunikation mit DrittsystemenTransaktionslogikPooling von Ressourcen für viele Clients
Marcel Gnoth, www.gnoth.net
Datenaustausch
Anwender möchte Daten sehen (oben)Die Daten sind in der DB gespeichert
(unten)Verarbeitung in der Mitte wie wandern die Daten??
zwischen Prozessenzwischen Computernzwischen verschiedenen SystemenSchnelligkeitInteroperabilität......
Marcel Gnoth, www.gnoth.net
Datenaustausch
Kopie der Daten schicken (serialisieren)Menge von Objekten als Byte – Strom
(Byte – Array)Transport über das Netz möglich
Objektreferenzen prozeß- und computerübergreifendDCOM, CORBA, RemotingAchtung: jeder Zugriff ist teuerbei Methodenaufrufen müssen Parameter
serialisiert werden (in, ref, out)
Marcel Gnoth, www.gnoth.net
Datentransport früher
ADODB Recordset (serialisierbar)war nur flache Ergebnismenge
Objekte (serialisierbare), Interface implementieren!Baum möglich
eigene Formate definierenObjekte Status in XML umwandeln und auf
der Empfängerseite zurückwandelnDaten beim Methodenaufruf übergeben
Marcel Gnoth, www.gnoth.net
Die Datasets kommen
mehrere ErgebnismengenRelationen zwischen Tabellen
(Kunde->Bestellung->Detail)können um eigene Elemente erweitert
werden, erbensind das direkte Ergebnis der DB –
Abfrage direktes Binden an GUI
Marcel Gnoth, www.gnoth.net
Datasets
Können Änderungen cachenÄnderungen können direkt in DB
geschrieben werdenAuf Konflikte prüfen
DataAdapter, bei mehr als einer Tabelle aufwendig
Änderungen können rückgängig gemacht werden
Marcel Gnoth, www.gnoth.net
Typisierte Datasets
Erweiterung der Klasse Datasetfür jede enthaltene Tabelle werden
individuelle DataTable – Objekte und DataRow – Objekte generiert
Compiler kann Typsicherheit prüfenwerden generiertTypsicherheit wird nicht erzwungenunübersichtlich
Marcel Gnoth, www.gnoth.net
In Memory DatabaseFilter mit Where KlauselSortierenErzeugen eigener Views über mehrere
Datatables
Marcel Gnoth, www.gnoth.net
Warum noch Objektmodelle???Aufbau der OOModelle
aus Datareader, aus DatasetOverhead der Objektinstaziierung spielt
keine RolleProgrammcode lesbarer und wartbarerDer GUI – und der Server
Programmierer werden es Ihnen dankenAber mehr Aufwand bei Pflege des OO –
Modells Aufwand und Nutzen sollten sich die
Wage halten
Marcel Gnoth, www.gnoth.net
Recordsets und DatasetsNachteile
kein echtes „semantisches“ Objektmodel
nicht typisiertkeine Methoden
VorteileEinfach zu erzeugenÄnderungen in DB schreibenKönnen mit DBNull umgehen
+ / -keine Abstraktion, direkte Daten
Marcel Gnoth, www.gnoth.net
Erfahrungen mit dem DatasetMehrere Tabellen sind gutAber oft speichern und möglichst
TabellenweiseEltern / Kind Änderungen sind komplizierter
zu speichern (Insert / Delete)„dumme“ DataAdapter
NutzerführungNach Laden aus DB DS um eigene
Spalten und Tabellen ergänzen
Teil 2
Ein paar Ideen aus der Praxis
Marcel Gnoth, www.gnoth.net
Beispielprojekt
SpieldatenbankDrei Klassen und drei
Collection – Klassen (Hashtable)Gefüllt über einen DatareaderEin Paket hat Paketschritte und
Speicherungen als EigenschaftenEin Dataset mit drei Datatables
Gefüllt über drei DataadapterRelationen und PK – Contraints
Na? Wer ist schneller ???
Pakete
Paketschritte Speicherungen
Marcel Gnoth, www.gnoth.net
DEMO
Marcel Gnoth, www.gnoth.net
SerialisierenFür Übertragung der Daten wichtig320.000 ZeilenWie groß ist ein serialisiertes
Dataset 52MBObjektmodell 29 MB
Beim Serialisieren hätten sie das XML optimieren könnenDim ms As IO.MemoryStream = New IO.MemoryStream
Dim bf As BinaryFormatter = New BinaryFormatter
bf.Serialize(ms, m_DS)
lblDSSize.Text = ms.Length.ToString("#,#")
Marcel Gnoth, www.gnoth.net
Das Dataset als CollectionErben von oder aggregieren eines
DatasetsImplementieren von
Add, RemoveItem
Item instanziiert Objekte und gibt Referenzen heraus
IEnumarable und IEnumerator evtl. IList ergänzen um Methoden
Alles was das Herz begehrt
Marcel Gnoth, www.gnoth.net
Achtung Objektreferenzen
Intern werden die Daten in DataRows gehalten
Item gibt Objekte herausKopien ?Immer die gleiche Referenz ?
Zugriff auf einzelne ElementeVerwaltung der „Herausgegebenen
Elemente“ da bei Value„On Demand“ werden Objekte generiert
Marcel Gnoth, www.gnoth.net
Beispiel
Marcel Gnoth, www.gnoth.net
Daten in DataRow halten
Normale Collection – Klasse Beim Füllen werden den Objekten ihre
DataRows übergebenIntern wird der Objektzustand in einer
DataRow gespeichertÜber Property – Prozeduren wird auf die
Eigenschaften zugegriffenDatarows sind mit DataTable verbunden
Updates zur DB
Marcel Gnoth, www.gnoth.net
Beispiel
Marcel Gnoth, www.gnoth.net
Schlussfolgerung
Datasets sind eine In-Memory Datenbank, die MS uns mit COM+ versprochen hat
Nicht mehr......und nicht weniger!Umfangreiche Möglichkeiten
Filterung, Sortierung, ViewsIntressante Variante eines
DataObjects!
Marcel Gnoth, www.gnoth.net
Wann Updaten??
MS gibt uns eine InMemory DBkomplexe Operationen können
lokal ausgeführt werdenÄnderungen werden in einem
„Rutsch“ gespeichertschont den Server(bei sehr vielen Anwendern)
Marcel Gnoth, www.gnoth.net
Probleme mit der Nebenläufigkeitwas wenn:
viele Anwender gleichzeitig arbeitenkomplexe Operationen auf Konsistenz
zum DB Modell geprüft werden müssen
Primärschlüssel benötigt werdenDas Leben wird plötzlich sehr
kompliziert...Fummlig
Marcel Gnoth, www.gnoth.net
Wann DS einsetzen
wenn man wirklich den DB-Server entlasten muß (disconnected Ansatz)
Außendienstmitarbeiter ??interessante Datenstruktur für lokale
Auswertungenkann sortieren, filtern,....
Marcel Gnoth, www.gnoth.net
Klassisch OOModell
komplexe Client LogikEigene Objektmodelle
komplexe Objekte, bei denen Sie eine Menge Methoden implementieren „wollen“
sehr effizientso oft speichern wie möglich
erhöht die Konsistenzverringert die Entwicklerprobleme
Marcel Gnoth, www.gnoth.net
Fragen?
Uff...Uff...
Alles wird gut