| 

.NET C# Java Javascript Exception

1
Hallo Codekickianer,

für die Frage die ich euch heute stelle, gibts bestimmt je nach Programmierstil mehrere Antworten. Wenn ich eine in " große Anwendung habe und als Datenquelle an eine SQL Datenbank angebunden bin, sollte ich dan logischer weise:
- alle Connectionoperationen
- alle Queries
- sozusagen alles was mit de DB zu tun hat

In einer Klasse ablegen?

Oder ist der Weg:
- Connection in der Form
- Queries / Funktionen ausgelagert in Klassen

ein Vorteilhafterer Weg. Oder gibt es noch andere sinnvolle Schemas?

In der Schule hab ich gelernt, das alles was zusammengehört auch in einer Klasse landet, außer es ist von der Knüpfung bestimmter Funktionalität her nicht möglich.


Viele Grüße

Spicejam
News:
10.07.2011
spicejam 853 2 6
3 Antworten
2
Für einen Miniprototyp, den man in wenigen Stunden (unter Androhung von Schlägen) auf die Beine stellen müsste, würde ich die "Alles in eine Klasse" oder "Teil in die GUI und Rest in Klassen" Lösung akzeptieren. Für eine in " große Anwendung sind beide nicht empfehlenswert (Thema Wartbarkeit, Erweiterbarkeit, SRP, SoC, ...).
Du musst immer versuchen, die einzelnen Komponenten Deiner Anwendung sauber zu trennen und zu schichten. Wenn Du Deine Datenbank Connection in deiner Form ablegst, hast Du GUI und Datenzugriff vermischt. Seit vielen Jahren ist das 3-Schicht Modell ein Begriff, an dem man das ganz gut nachvollziehen kann. Das 3 Schicht Modell kennt

  • UILayer
  • BusinessLayer
  • DataAccessLayer

D.h. ganz oben sitzt dein Userinterface, das wiederum auf eine Schicht zugreift, die die Fachlichkeit Deiner Anwendung implementiert und diese wiederum bedient sich der Datenzugriffsschicht, in der dann Deine Persistenzanforderungen abgebildet werden.
Dabei darf die Zugriffsrichtung nur um eine Ebene weiter von oben nach unten sein, d.h. deine Form im UILayer sieht in einem derartigen Design überhaupt gar kein Connection Objekt mehr (weil der DataAccessLayer und damit Dein Connection Objetk zwei Schichten weiter unten liegt und deine Form da nicht hinfassen darf). Das Belang der Persistenz Deiner Daten ist bei der Präsentation der Daten bereits verschwunden (und das ist auch gut so).
Ich hab die Tage auf Eric Lippert's Blog einen schöne Analogie dazu gelesen:
Der C# Compiler legt normalerweise den this-Pointer in das ECX Register und den Rückgabewert von Methoden in das EAX Register (auf x86 Prozessoren) - ganz ehrlich: Ich bin froh, dass derartige Details für mich nicht mehr wichtig sind, wenn ich C# Code schreibe.

Über Softwarearchitektur und -design sind soviele Bücher und Beiträge geschrieben worden, da wirst Du sicher fündig.
Ich denke aber, mit den Begriffen, die ich hier genannt habe, findest Du soviel Beiträge im Netz, dass Du Schritt für Schritt vorgehen kannst. Bei Fragen meldest Dich halt einfach wieder.

Gruß
Florian
10.07.2011
ffordermaier 8,4k 3 9
Vielen Dank, es ist so das ich für kleiner Anwendungen den Code einfach runterratter und gut ist. Allerdings ist es in letzter Zeit so, dass ich mit größeren Projekten an den Start gehe und somit auch qualität mitbringen muss. Deine Tipps helfen mir sehr weiter ich werde mich einfach mal einlesen.
spicejam 10.07.2011
1
Ich benutze die Enterprise Library von Microsoft und habe dazu z.B. eine Klasse "DataAccess" die die Zugriffe dann kapselt.
10.07.2011
Ich 256 1 8
Interessant, werde ich mal durchlesen und schauen ob sich da Gemeinsamkeiten auf tun. Danke :)
spicejam 10.07.2011
Wie setzt man diese Enterprise Library von Microsoft ein? Ein gutes Beispiel dazu?
– Gast 12.07.2011
Beispiele gibts hier http://msdn.microsoft.com/en-us/library/ff632023.aspx Ist eigentlich auch kein Hexenwerk, relativ einfach zu verstehen. Probiers einfach aus und frag konkret nochmal nach wenn Du an einer Stelle nicht weiterkommst.
Ich 12.07.2011
0
Man muss bei der Fragestellung auch unterscheiden, um welchen Server es sich handelt. Ich habe in meinem Fall einen MySQL-Server. Da wird man vom Visual Studio gar nicht unterstützt und muss eh alles selbst zu Fuß machen. Im Wesentlichen definiere ich in den Klassen immer eine MySQLConnection, MySQLCommand, MysqlDataAdapter und - je nachdem, was das Form macht - noch DataSet, DataRow und DataTable. Ich habe in meinem Code die Abfragen direkt drin. Ich sehe das nämlich nicht ein, das Ganze auszulagern um dann im Zweifelsfall zu suchen, was denn die Abfrage genau macht ;-)

Hat man die Daten mal im Speicher, kann man übrigens ein DataGrid ohne Probleme befüllen.
11.07.2011
muffi 1,4k 1 9
Mit einer sauberen Architektur ist die Frage nach dem eingesetzten Sql Datenbankserver im einfachsten Fall (Ausnahme: Gebrauch von non-standard serverspezifischen Features) nur das Ändern eines ConnectionStrings in einer Konfigurationsdatei. Selbst das Umstellen auf eine z.B. dateibasierte Persistenz (statt SQL RDBMS) ist in der Software einfach lokalisierbar und mit minimalem Impact durchführbar.
ffordermaier 11.07.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH