Лично я не фанат TDataModule.Это очень мало для поощрения хороших принципов проектирования ОО.Если бы все это использовалось для создания удобного контейнера для компонентов БД, это было бы одно, но слишком часто это превращалось в дамп для бизнес-логики, которая была бы лучше на уровне домена.Когда это происходит, он становится классом бога и магнитом зависимости.
Добавьте к этому баг (или, возможно, его особенность), который продолжает существовать, по крайней мере, Delphi 2 , который вызываетОсведомленные данные формы управляют потерей своих источников данных, если эти источники данных находятся в блоке, который не открыт перед формой.
Мое предложение
- Добавьте слой домена между вашим пользовательским интерфейсом и базой данных
- Вставьте как можно большую часть своей бизнес-логики в доменные объекты.
- Сделайте свой пользовательский интерфейс и уровни персистентности данных как можно более мелкими, используя дизайн и архитектурные шаблоны для делегирования принятия решений на уровне домена.
Если вы не знакомы с ним, этот метод называется доменный дизайн .Это, конечно, не единственное решение, но хорошее.Основная предпосылка заключается в том, что пользовательский интерфейс, бизнес-логика и база данных меняются с разной скоростью и по разным причинам.Поэтому сделайте бизнес-логику моделью проблемной области и отделите ее от пользовательского интерфейса и базы данных.
Как это делает мой код более тестируемым?
Перемещаябизнес-логику на своем собственном уровне, вы можете протестировать ее без вмешательства пользователя или базы данных.Это не означает, что ваш код будет по сути тестируемым просто потому, что вы поместите его в собственный слой.Создание тестируемого устаревшего кода - сложная задача.Большая часть устаревшего кода тесно связана, поэтому вы потратите немало времени, разбирая его на классы с четко определенными обязанностями.
Это стиль Delphi ?
Это зависит от вашей точки зрения.Традиционно большинство приложений Delphi создавались путем разработки пользовательского интерфейса и базы данных в тандеме.Отбросьте несколько элементов управления в базе данных на конструкторе форм.Добавить / обновить таблицу с полями для хранения данных элемента управления.Посыпать либеральным количеством бизнес-логики, используя обработчики событий.Виола!Вы только что испекли заявку.Для очень маленьких приложений это отличная экономия времени.Но давайте не будем обманывать себя, маленькие приложения имеют тенденцию превращаться в большие, и этот дизайн становится непреодолимым кошмаром обслуживания.
Это действительно не ошибка языка.Вы найдете такие же быстрые / грязные / близорукие дизайны из сотен магазинов VB, C # и Java.Подобные приложения являются результатом работы начинающих разработчиков, которые не знают ничего лучше (и опытных разработчиков, которые должны знать лучше), IDE, которая делает ее такой простой и требует быстрого выполнения работы.
В сообществе Delphi (как и в других сообществах) есть люди, которые давно отстаивают лучшие методы проектирования.