Компоненты
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-данных, когда элементы управления пользовательского интерфейса в основном подключаются прямо к столбцам / таблицам базы данных.
Если вы хотите преобразоватьэто приложение, чтобы иметь более многоуровневую архитектуру, осторожно и медленно.Познакомьтесь сначала с текущей архитектурой и узнайте ее достаточно хорошо, чтобы увидеть, какое влияние окажет этот вид трансформации.Ссылки, предоставленные Serg, безусловно, помогут вам в этом.Павел Гловаки много писал о DataSnap.