Где должен находиться компонент TClientDataset? - PullRequest
3 голосов
/ 15 января 2010

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

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

Ответы [ 5 ]

5 голосов
/ 15 января 2010

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

2 голосов
/ 15 января 2010

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

2 голосов
/ 15 января 2010

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

1 голос
/ 18 января 2010

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

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

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

1 голос
/ 18 января 2010

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

...