Где должен находиться компонент TClientDataset?

Немного предыстории: я хочу разработать настольное приложение с базой данных SQL в качестве хранилища. Только один пользователь одновременно подключен к базе данных.
Чтобы упростить обслуживание, я бы хотел отделить графический интерфейс от Busniss Logic. Таким образом, я подумал об использовании DataModule (где реализован BL) для каждого диалога.

Мой вопрос: где правильное место для вставки компонента TClientDataset? Прямо в диалоге или в модуле данных?

5 ответов

Решение

Лично я помещаю потомков TDataset всегда в модуль данных. Если в какой-то момент вы решите изменить свои формы, у вас все еще будут ваши наборы данных. Тогда обмен информацией между формами также будет проще. В общем, держите свой графический интерфейс и данные отдельно!

Если TClientDataSet не будет использоваться более чем одним экраном одновременно, для удобства можно безопасно разместить их в модуле данных. Однако, когда у вас есть два или более экрана, обращающихся к одному и тому же TClientDataSet, у вас будет проблема, так как у набора данных есть только один курсор, и переход к другой записи на одном экране также переместит к другой записи на других экранах. В этом случае: поместите TClientDataset на экраны, которые используют данные. Соединение все еще может быть помещено в модуль данных, так как он является общим для всех наборов данных.

Я бы поставил DataSets в DataModules. Таким образом, вы можете иметь несколько представлений в разных формах, указывающих на один и тот же набор данных, например представление сведений и список в сетке, и они всегда будут синхронизироваться автоматически.
Он также формализует разделение данных между бизнес-правилами и пользовательским интерфейсом с функциями представления, что упрощает изменение бизнес-правил или самостоятельное изменение дизайна пользовательского интерфейса.
И если вам нужно, чтобы несколько экземпляров форм обращались к разным данным, вы всегда можете создать несколько модулей данных и привязать каждую форму к соответствующему.

Наборы данных в модуле данных - но источники данных в форме или фрейме - всегда хорошо работали для меня.

Способ передачи данных:

  • иметь модули данных BL со слоем доступа к данным и компонентами TDatasetProvider, а также бизнес-код
  • есть модули данных только с TClientDatasets.

Таким образом, если вы измените реализацию на n-уровневый с использованием DataSnap (или другой n-уровневой технологии, в которой вы можете повторно использовать наборы клиентских данных), вам просто нужно переместить модули данных BL на соответствующий уровень.

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