Вопрос

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

Мой вопрос:Где подходящее место для вставки компонента TClientDataset?Прямо в Диалоге или в DataModule?

Это было полезно?

Решение

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

Другие советы

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

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

Наборы данных в модуле данных, а также источники данных в форме или фрейме всегда мне помогали.

Способ привязки данных:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top