2010-04-11 4 views
7

In der klassischen Delphi-Datenbankanwendung haben wir ein Formular, eine Gruppe von datensensitiven visuellen Steuerelementen, die über TDataSources mit TDataSets verbunden sind. Wenn Sie eine Datenbankanwendung mit dem MVC-Modell entwerfen möchten, wo platzieren Sie TDataSet-Komponenten? Sollten sie auf Form bleiben und somit ein Teil von View sein? Oder sollten sie in einem Model-Objekt gekapselt sein? Wenn letzteres wie an visuelle Komponenten gebunden werden könnte?Datenbankanwendung mit MVC-Paradigma

Antwort

3

könnten Sie delphi Projekt über MVC Augen wie diese:

TDataModule -> Model 
TYourForm.pas -> Controller 
TYourForm.dfm -> View 

Wenn Sie es akzeptieren, als Sie in Datasets Datamodule setzen sollte.

Im Projekt, an dem ich arbeite, habe ich auch TClientDataSets auf Formulare gelegt und Daten bei der Erstellung geklont. Auf diese Weise habe ich Daten in TForm mit Logik im Datenmodul isoliert.

Schade, dass es kein ActiveRecord ähnliches Framework für Delphi gibt.

+0

+1 In der Tat; Delphi hat MVC so lange gemacht, dass die Leute es vergessen :-) –

2

ich ein MVC-like Rahmen für meine aktuellen Kunden gemacht haben, damit Sie es so etwas wie dieses machen würde:

  • TDataModule = Modell (für Daten, so TDataset Sachen)
  • TForm = Ansicht (enthält Datenquellen, auf TDatasets Modell verbunden)
  • Controller.pas = Controller (Ausführung/Business-Logik)

Versuchen Sie, Ihre Form so sauber wie möglich zu halten: nur Sachen für GUI enthalten. Implementieren Sie spezielle (Geschäftsregeln, Datenaktualisierungen usw.) Logik im Controller. Denken Sie daran: Ihre Ansicht muss leicht durch eine andere Ansicht ersetzt werden (wie die Webseite).

In meinem MVC-ähnlichen Framework ruft die Ansicht Methoden (wie Suchen, Aktualisieren, usw.) mit Parametern des Controllers auf, der Controller weiß, was und wie usw. zu suchen und füllt/aktualisiert das Modell. View ist mit dem Modell verbunden (Eigenschaft des Controllers).
Es ist nicht genau MVC, aber auf diese Weise ist die GUI von allen Arten von Logik getrennt und es ist immer noch leicht zu debuggen und zu pflegen (Sie könnten Abhängigkeitsinjektion/lose Kopplung mit dem Controller usw. verwenden, aber dies macht es nur schwieriger verwenden, wenn benötigt)

Verwandte Themen