Я знаю, что это, вероятно, давний вопрос, но какая практика лучше? Использование объекта модели предметной области на всех уровнях вашего приложения и даже привязка значений непосредственно к ним в JSP (я использую JSF). Или преобразуйте объект модели домена в DTO на уровне DAO или Service и отправьте облегченный DTO на уровень представления.
Мне сказали, что нет смысла использовать DTO, потому что изменения в базе данных приведут к изменениям во всех ваших DTO, тогда как повсеместное использование Объектов модели просто потребует изменений в затронутом объекте модели. Однако простота использования и легкий характер DTO, кажется, перевешивают это.
Я должен отметить, что мое приложение использует объекты модели Hibernate И использует свои собственные объекты модели, созданные пользователем (то есть не привязанные к какому-либо сеансу БД, всегда отключенные). Является ли какой-либо из приведенных выше сценариев более полезным для строгого шаблона объекта модели? Использование Hibernate было огромной PITA в отношении таких вещей, как исключения Lazy Initialization.
Я редактирую этот вопрос в надежде продолжить обсуждение (не уверен, правильно ли я делаю):
Проблема, с которой я сталкиваюсь с модельными объектами, заключается в том, что они вообще не являются гибкими. Комментарий ниже говорит о том, что приложение должно быть спроектировано так, чтобы объекты модели могли использоваться на всех уровнях. Зачем? Если пользователь хочет получить часть нелепой функциональности, я должен сказать им: «Ну, это не будет работать с объектами модели»?
Простые и понятные моменты, когда объекты модели не работают. Вы можете иметь:
public class Teacher {
List<Student> students;
[tons of other Teacher-related fields]
}
public class Student {
double gpa;
[tons of other Student-related fields]
}
но, возможно, вам не нужна вся эта информация. Вам просто нужны фамилия учителя, количество учеников, которых они обучают в этом году, и средний средний балл для всех учеников вместе взятых. Что бы вы сделали в этом случае? Получите полную информацию об учителе и взаимоотношениях со студентами, а затем ваш код получит счет в Списке студентов, а затем вычислит общее среднее значение всех gpas внутри? Это похоже на большие усилия, чем просто создание DTO с «String lastName», «int numStudents» и «двойной комбинированный Gpa;
»
Может показаться, что мое мнение об этом принято, но мне еще предстоит поработать в приложении, где объекты модели могут быть полностью использованы чисто в каждом случае. Обычные приложения реального мира с необычными требованиями пользователей просто не работают таким образом.