2010-04-11 9 views
7

W klasycznej aplikacji bazy danych Delphi mamy formularz, zestaw kontroli wizualnych danych związanych z TDataSets za pośrednictwem TDataSources. Jeśli chcemy zaprojektować aplikację bazodanową za pomocą modelu MVC, gdzie umieścić komponenty TDataSet? Czy powinni pozostać na formularzu, a zatem być częścią View? A może powinny być zamknięte wewnątrz jakiegoś obiektu Model? Jeśli to drugie, jak można je związać z komponentami wizualnymi?Aplikacja bazodanowa korzystająca z paradygmatu MVC

Odpowiedz

3

Widać delphi projektu poprzez MVC oczach tak:

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

Jeśli zaakceptujesz go, niż należy umieścić DataSetów w DataModule.

W projekcie, nad którym pracuję, umieszczam również TClientDataSets na formularzach i klonuję dane o tworzeniu. W ten sposób wyizolowałem dane w TForm, z logiką w datamodule.

Szkoda, że ​​nie ma ramek ActiveRecord podobnych do delphi.

+0

+1 Rzeczywiście; Delphi zrobiło MVC tak długo, że ludzie zapominają :-) –

2

Zrobiłem MVC-podobnego ramy dla mojego obecnego klienta, na jakich można to uczynić coś takiego:

  • TDatamodule = modelu (dla danych, więc TDataSet rzeczy)
  • TForm = View (zawiera źródeł danych, podłączone do TDatasets od modelu)
  • Controller.pas logicznych = Controller (wykonanie/business)

starać się utrzymać swoją formę tak czysty, jak to możliwe: może zawierać tylko rzeczy dla GUI. Zaimplementuj logikę specjalną (reguły biznesowe, aktualizacje danych itp.) W kontrolerze. Pamiętaj: widok musi być łatwo zastąpiony innym widokiem (np. Strona internetowa).

W mojej strukturze podobnej do MVC widok wywołuje metody (takie jak wyszukiwanie, odświeżanie itp.) Z parametrami kontrolera, kontroler wie, co i jak wyszukiwać itp. I wypełnia/aktualizuje model. Widok jest połączony z modelem (właściwość kontrolera).
To nie jest dokładnie MVC, ale w ten sposób GUI jest oddzielony od wszelkiego rodzaju logiki i nadal jest łatwy do debugowania i utrzymywania (możesz użyć zależności wtryskowej/luźnego sprzężenia z kontrolerem itp., Ale to czyni trudniejszym, tylko użyć w razie potrzeby)