Приложение базы данных с использованием парадигмы MVC - PullRequest
7 голосов
/ 11 апреля 2010

В классическом приложении базы данных Delphi у нас есть форма, набор визуальных элементов управления с учетом данных, подключенных к TDataSets через TDataSources. Если кто-то хочет спроектировать приложение базы данных, используя модель MVC, где разместить компоненты TDataSet? Должны ли они оставаться в форме и, следовательно, быть частью View? Или они должны быть заключены в некоторый объект Model? Если последние, как они могли быть связаны с визуальными компонентами?

Ответы [ 2 ]

3 голосов
/ 11 апреля 2010

Вы можете увидеть проект Delphi через глаза MVC, например:

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

Если вы принимаете это, то вы должны поместить DataSets в Datamodule.

В проекте, над которым я работаю, я также помещаю TClientDataSets в формы и клонирую данные при создании. Таким образом, я изолировал данные в TForm, с логикой в ​​модуле данных.

Жаль, что нет ActiveRecord, как фреймворк для Delphi.

2 голосов
/ 12 апреля 2010

Я сделал MVC-подобный фреймворк для моего текущего клиента, для вас это будет примерно так:

  • TDatamodule = Модель (для данных, поэтому материал TDataset)
  • TForm = View (содержит источники данных, подключенные к TDatasets модели)
  • Controller.pas = Контроллер (выполнение / бизнес-логика)

Постарайтесь, чтобы ваша форма была как можно более чистой: может содержать материалы только для графического интерфейса. Реализация специальной (бизнес-правила, обновления данных и т. Д.) Логики в контроллере. Помните: ваш вид должен быть легко заменен другим видом (например, веб-страницей).

В моей MVC-подобной среде представление вызывает методы (такие как поиск, обновление и т. Д.) С параметрами контроллера, контроллер знает, что и как искать и т. Д., И заполняет / обновляет модель. Вид связан с моделью (свойство контроллера).
Это не совсем MVC, но таким образом GUI отделен от всех видов логики, и его все еще легко отлаживать и поддерживать (вы можете использовать инъекцию зависимостей / слабую связь с контроллером и т. Д., Но это усложняет, только когда необходимо)

...