Приложение базы данных с использованием парадигмы MVC

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

2 ответа

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам