DAL/BLL и клиент / сервер: должен ли клиент использовать объекты BLL или DAL для представления? Или, может быть, другой слой (объект передачи данных?)
Я пишу систему клиент / сервер. Сервер имеет дизайн DAL/BLL. Клиент отвечает за представление объектов данных и предоставление диалогов и мастера, чтобы позволить пользователю обновлять эти объекты (т.е. добавлять / редактировать пользователя).
Сначала я думал, что у объектов DAL будет универсальный объект-поставщик данных, чтобы они могли использоваться как клиентом, так и сервером. Например, когда объект данных используется сервером, база данных является поставщиком данных; когда объект данных используется клиентом, сервер является поставщиком данных.
Таким образом, объект изменяется на уровне представления, например, "пользователь": user->setName("Fred"), а затем фиксирует его как этот user->commit(), метод commit вызывает метод commit поставщика данных, который затем кодирует объект и отправляет его на сервер. Затем сервер "украшает" его объектом бизнес-уровня и продолжает с него.
В настоящее время я работаю в качестве прототипа с объектами DAL, определенными в общем проекте, который используется как клиентом, так и сервером. Затем сервер внедряет своего поставщика данных (который использует базу данных), а клиент внедряет поставщика данных, который использует сервер.
Мне интересно, кажется ли это разумным подходом? Я продолжаю задаваться вопросом, нужен ли мне другой слой вместо того, чтобы объекты DAL были выставлены непосредственно клиенту. Может быть, слой объектов передачи данных, который дал бы мне 3 уровня: объекты доступа к данным, объекты бизнес-логики и объекты передачи данных.
Благодарю.
1 ответ
Это не очень хорошая идея выставлять "внутренние объекты", такие как использованные / возвращенные объекты, покупая DAL. Лучше держать все внутренние объекты скрытыми от клиента и иметь полный набор объектов для связи клиент-сервер. Может потребоваться дополнительная работа по преобразованию одного объекта в другой, но это значительно упростит обновление системы, если сервер и клиент не обновятся вместе.