WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 11.06.2002, 20:13   #1
SNo0py
Inventar
 
Registriert seit: 08.02.2000
Beiträge: 1.696


Standard [Design] Datenbank + Programm

Hi Analytiker und Programmierer!

Ich brauche eine Kunden/Artikel/Rechnungsverwaltung. Schön
Das ganze soll rein OO gelöst werden; im Hintergrund spielt eine Access-Datenbank den Speicher (kann ich ja später mal leicht "aufrüsten") und "vorne" programmier ich mit .NET.

Jetzt habe ich folgendes Problem:
Wie greife ich auf die DB zu?

Wie es rein technisch, von .NET aus funkt, ist mir schon klar. Aber ich hab ein DB-Konzept und ich hab Formulare und Klassen in der Anwendung. Aber ist die Datenbank quasi ein "globales Objekt" auf das alle anderen Klassen zugreifen können, gebe ich dieses DB-Objekt an alle anderen Klassen mit oder leite ich alle Klassen von diesem DB-Objekt ab?

Hat da schon jemand Erfahrung, wie man so eine Anwendung designt?
____________________________________
Sex is like hacking. You get in, you get out, and you hope you didnt leave something behind that can be traced back to you.
SNo0py ist offline   Mit Zitat antworten
Alt 20.06.2002, 20:59   #2
Flink
Hero
 
Registriert seit: 29.08.2001
Alter: 58
Beiträge: 904


Flink eine Nachricht über ICQ schicken Flink eine Nachricht über Skype™ schicken
Standard Re: [Design] Datenbank + Programm

Zitat:
Original geschrieben von SNo0py
Aber ist die Datenbank quasi ein "globales Objekt" auf das alle anderen Klassen zugreifen können, gebe ich dieses DB-Objekt an alle anderen Klassen mit oder leite ich alle Klassen von diesem DB-Objekt ab?
Auf ein globales Objekt kannst du von jeder Klasse aus zugreifen. Also brauchst du es nicht an die Klassen mit zuübergeben.
Jede Klasse von der DB-Klasse abzuleiten wäre nicht zu empfehlen. Es würde zur undurchschaubaren Mehrfachvererbung führen. Ich gehe mal davon aus, daß dieses DB-Objekt sich um alles kümmern soll, was mit Datenbank zu tun hat. Es gibt ja noch die Möglichkeit, für jede Tabelle ein eigenes DB-Objekt anzulegen. So könnten die Daten im Rechner zwischengespeichert bleiben. Doch eigentlich sollte ja die Datenbank sich um diese Performance-Sachen kümmern.
Damit du später leicht aufrüsten kannst, solltest du von vorneherein die Klassen so anlegen, daß die Trennung Client-Server ohne Umprogrammierung möglich sein wird! Die einen Klassen bleiben dann auf dem Client, andere wandern zum Server.
Achte auf Einhaltung von MVC!
____________________________________
Bibel
Flink ist offline   Mit Zitat antworten
Alt 20.06.2002, 21:21   #3
SNo0py
Inventar
 
Registriert seit: 08.02.2000
Beiträge: 1.696


Standard

Klingt irgendwie alles logisch...

Aber MVC sagt mir nix...
____________________________________
Sex is like hacking. You get in, you get out, and you hope you didnt leave something behind that can be traced back to you.
SNo0py ist offline   Mit Zitat antworten
Alt 20.06.2002, 21:35   #4
Flink
Hero
 
Registriert seit: 29.08.2001
Alter: 58
Beiträge: 904


Flink eine Nachricht über ICQ schicken Flink eine Nachricht über Skype™ schicken
Standard

M ... Model: die Business-Logik, die eigentlich möglichst nahe an der Datenbank programmiert werden sollte.

V ... View: die Benutzeroberfläche

C ... Controller: die Events, wenn Tasten gedrückt werden etc.
Hier wird auch eine Fehlermeldung angezeigt, wenn falsche
Eingaben getätigt worden sind.


Wenn du diese Trennung beachtest und einhältst, hast du bei Änderungen den geringsten Aufwand. Du könntest bspw. die Benutzeroberfläche ändern, ohne daß du bei M oder C etwas ändern müßtest. Meistens wird V und C ineinander verschmolzen, weil sie doch nahe zusammengehören. Doch VC sollten nichts davon wissen, wie die Daten abgespeichert werden. Es ruft lediglich Methoden von M auf, um Plausibilitätsprüfungen in der DB durchzuführen oder Daten zu lesen und abzuspeichern.
Es wäre eben umständlich, wenn in den Klassen von V oder C selbständig SQL-Abfragen generiert würden, die Daten aus der DB holen und Berechnungen durchführen. So etwas gehört nach M. Dann hast du es später viel einfacher bei Änderungen.
____________________________________
Bibel
Flink ist offline   Mit Zitat antworten
Alt 21.06.2002, 09:07   #5
SNo0py
Inventar
 
Registriert seit: 08.02.2000
Beiträge: 1.696


Standard

Danke für die ausführliche Erklärung! Das ist eigentlich eh die Kapselung von der OO.
Ich werde einfach eine Datenklasse schreiben, welche verschiedene Funktionen für die Ansichten zur Verfügung stellt (Rückgabe der Tabellen und Ansichten). Ist glaub ich am einfachsten...

Danke
____________________________________
Sex is like hacking. You get in, you get out, and you hope you didnt leave something behind that can be traced back to you.
SNo0py ist offline   Mit Zitat antworten
Alt 21.06.2002, 11:26   #6
it00x30
Veteran
 
Registriert seit: 21.07.2001
Alter: 45
Beiträge: 404


Standard

du solltest auf jeden fall den db-zugriff vor den anderen klassen verbergen - sprich eine klasse (.. eine db-fassade) schreiben, die dir die erzeugung der objekte aus der datenbank und das schreiben dieser objekte abnimmt



als beispiel: du hast willst ein kundenobjket von dem du zb die id kennst, dann schickst du der db-fassade ein
get(Class.forname("Kunde"), id)
und die fassade leitet dann die nötigen schritte ein um ein solches objekt aus der db zu holen
(das Class.forname("Kunde") kannst ja weglassen und einfach getKunde(id) verwenden)
it00x30 ist offline   Mit Zitat antworten
Alt 21.06.2002, 11:50   #7
SNo0py
Inventar
 
Registriert seit: 08.02.2000
Beiträge: 1.696


Standard

In .NET gibts da die tollen DataSets und DataTables und DataRows mit DataColumns...

Mit denen kannst auf jede Datenbank gleich zugreifen
____________________________________
Sex is like hacking. You get in, you get out, and you hope you didnt leave something behind that can be traced back to you.
SNo0py ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:18 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag