Компоненты
TDataSource — это мост между элементами управления с поддержкой данных и набором данных (потомком TDataSet), из которого они должны получать свои значения.
TClientDataSet — один из таких наборов данных. TClientDataSet можно использовать изолированно, например, для доступа к данным, содержащимся в файлах xml, но его также можно подключить к TDataSetProvider.
TDataSetProvider — это мост между TClientDataSet в памяти и фактическим набором данных, который берет свои данные из базы данных через какой-то драйвер. При разработке клиент-сервера вы обычно будете видеть TRemoteDataSetProvider (имя может быть другим, я не так часто работаю с этими компонентами), который устраняет разрыв между клиентом и сервером.
TSQLDataSet — это фактический набор данных, получающий данные из некоторой базы данных.
Мне было бы странно видеть весь этот квартет в одном исполняемом файле. Я ожидаю, что TSQLDataSet на стороне сервера будет подключен к ответной части TRemoteDataSetProvider. Тем не менее, я предполагаю, что со встроенной базой данных это может быть способом поддержки модели портфеля, где TClientDataSet действительно полезен (TClientDataset очень мощный, это только одна из его сильных сторон).
Один модуль данных
Ой. Один огромный модуль данных — это ленивое программирование или результат неправильного представления о том, как использовать модули данных. Совершенно нормально иметь один модуль данных, который «размещает» соединение с базой данных, которое затем используется различными другими модулями данных, которые более тесно связаны с аспектами приложения.
Абстракция домена
Что касается абстрагирования вашей бизнес-модели, dbexpress и datasnap действительно не должны быть нигде в вашей бизнес-модели. Они должны быть частью вашего уровня данных.
TDataSource, TClientDataSet и настраиваемые потомки TDataSetProvider можно использовать для усиления возможностей элементов управления с поддержкой данных в пользовательском интерфейсе, сохраняя при этом пользовательский интерфейс отдельно от бизнес-модели. В этом случае пользовательский TDataSetProvider будет мостом между клиентским набором данных и коллекциями и экземплярами на уровне предметной области.
Несмотря на это, я все равно ожидал бы увидеть отдельный уровень данных, использующий TRemoteDataSetProviders или прямых потомков TDataSet (таких как TSQLDataSet), чтобы обеспечить слой домена своими данными.
Единственный огромный модуль данных, о котором вы упомянули, может быть частью этого уровня данных, а клиентские наборы данных предоставляют бизнес-уровню свои данные. Поскольку вы также упоминаете TDataSource как часть общего квартета, приложение, вероятно, было разработано с учетом данных RAD, где элементы управления пользовательского интерфейса в основном подключаются прямо к столбцам/таблицам базы данных.
Если вы хотите преобразовать это приложение, чтобы оно имело более многоуровневую архитектуру, действуйте осторожно и медленно. Сначала ознакомьтесь с текущей архитектурой и узнайте ее достаточно хорошо, чтобы увидеть влияние, которое может оказать такое преобразование. Ссылки, предоставленные Сергом, безусловно, помогут вам в этом. Павел Гловацки много писал о DataSnap.
person
Marjan Venema
schedule
02.10.2011