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
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.
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)
+1 Rzeczywiście; Delphi zrobiło MVC tak długo, że ludzie zapominają :-) –