В классическом приложении базы данных Delphi у нас есть форма, ряд осведомленных о данных визуальных средств управления, подключенных к TDataSets через TDataSources. Если Вы хотите разработать приложение базы данных с помощью модели MVC, куда поместить компоненты TDataSet? Они должны остаться на форме и поэтому быть частью Представления? Или они должны инкапсулироваться в некотором Объекте модели? Если последний, как они могли быть связаны с визуальными компонентами?
Вы можете увидеть проект delphi через глаза MVC следующим образом:
TDataModule -> Model
TYourForm.pas -> Controller
TYourForm.dfm -> View
Если вы его принимаете, то вам следует поместить DataSets в Datamodule.
В проекте, над которым я работаю, я также помещаю TClientDataSets в формы и клонирую данные при создании. Таким образом, я изолировал данные в TForm с логикой в модуле данных.
Жалко, что для delphi нет фреймворка, подобного ActiveRecord.
Я создал MVC-подобную структуру для моего текущего клиента, для вас это будет примерно так:
Старайтесь, чтобы ваша форма была как можно более чистой: может содержать только материал для графического интерфейса. Реализуйте в контроллере специальную логику (бизнес-правила, обновление данных и т. Д.). Имейте в виду: ваше представление должно быть легко заменено другим представлением (например, веб-страницей).
В моей MVC-подобной структуре представление вызывает методы (например, поиск, обновление и т. Д.) С параметрами контроллера, контроллер знает, что и как искать и т. Д., И заполняет / обновляет модель. Вид связан с моделью (свойством контроллера).
Это не совсем MVC, но таким образом графический интерфейс отделен от всех видов логики, и его по-прежнему легко отлаживать и поддерживать (вы можете использовать внедрение зависимостей / слабую связь с контроллером и т. Д., Но это усложняет задачу, используйте только при необходимости)