Bei den Fragen 1 und 2 gehen Sie zu Matthews Antworten.
Ich habe viel Zeit damit verbracht, herauszufinden, wie die DAL von Desktop-Anwendungen am besten strukturiert werden kann. Und der beste Weg hängt wirklich von den Anforderungen der Anwendung ab. In einer meiner Apps habe ich eine DA-Klasse für jede Datenbanktabelle eingerichtet, die sich bei einer zentralen (dh Singleton-) DataProvider-Klasse registriert und die CRUD verarbeitet hat. Jede DA-Klasse könnte dann entscheiden, ob sie alle Tabellendaten im RAM zwischenspeichern möchte oder nicht (Leistung!) Und / oder ob sie die Fähigkeit haben muss, automatische Client-Updates in anderen Clients auszulösen, die auf anderen Computern ausgeführt werden (denken Sie an Mehrbenutzer) Parallelität). Dies macht das Hinzufügen neuer DAL-Klassen sehr einfach, da sie lediglich der Registrierungsschnittstelle entsprechen müssen.
Nicht jeder DAL benötigt diese Art von Funktionalität, aber ich habe gelernt, dass der Ansatz selbst (dh Singleton-Datenprovider und einfache DAL-Klassen mit statischer Registrierung) mein Leben viel einfacher machte, als ich anfing, neue Klassen hinzuzufügen.
Ich würde definitiv nicht empfehlen, die CRUD in höhere Klassen einzubauen, es sei denn, dies ist eine sehr einfache Anwendung. Die DAL ist eine Abstraktion des Datenspeichers. Wenn Sie sich entscheiden, Ihren Datenspeicher zu einem späteren Zeitpunkt zu ändern (auch wenn nur MySQL anstelle von MS SQL verwendet wird), sind Sie dafür sehr dankbar. Plus: BLL-Objekte sollten nach ihren Geschäftslogikbeziehungen strukturiert sein. DAL-Objekte sind nach den Arten von Speichercontainern strukturiert, die sie darstellen. Die Unterschiede können dramatisch sein.
Machen Sie Ihre DAL-Klassen NICHT statisch. Was Sie an Codierungsgeschwindigkeit gewinnen, verlieren Sie um ein Vielfaches an Testbarkeit und Flexibilität.