Вопрос

У меня есть проект, который использует Spring и разбит на пару десятков DAO и связанных DTO.Я использую JdbcTemplate, но не более того, поскольку это именно тот уровень абстракции, которым я доволен.

В настоящее время я выполняю отложенную загрузку своих DTO, помещая некоторый довольно сложный код в их геттеры.

Базовая шаблонная логика такова:1.Если поле не равно null, верните его значение и завершите работу 2.Свяжитесь с соответствующим DAO и получите соответствующие DTO 3.Храните их до следующего раза.

Это работает нормально, за исключением того, что мои скромные DTO сочетаются с целой кучей DAO и не такие уж похабные.

Другой запах кода появляется, если я помещаю логику в DAO, поскольку он будет обрабатывать как CRUD для своих DTO, так и отложенную загрузку, и, насколько я понимаю, объекты должны нести единую ответственность.

Я надеюсь, что существует относительно простой подход Spring, который я могу использовать для внедрения объекта Lazy Loader между DAO и DTO для достижения этой цели, но для меня подойдет любое другое решение.

Есть какие-нибудь идеи?

Это было полезно?

Решение

Проще обернуть DAO's вокруг DAO's...это зависит от того, какую часть модели вы хотите использовать.DTO обычно не используются для преобразования "один ко многим" в виде двух или более отдельных вызовов database / dao.В этом случае вам действительно нужен ORM.С тех пор, как вы ищете ответ dao......

Ничто не мешает вам связать DAO воедино, чтобы получить один-единственный DTO.Это проще, чем подключить DTO к DAO.На самом деле это не уровень сервиса, это просто строительные блоки DAO.Таким образом, у вас может быть personondao и TelephoneNumberDao .У человека может быть более одного телефонного номера, поэтому у вас также может быть PersonModelDAo, который использует PersonDao и TelephoneNumberDao для выполнения своей работы.

В качестве альтернативы, избегайте всей проблемы и не пытайтесь сопоставить 1-N между человеком и номером телефона на уровне DTO.Просто попросите ваш пользовательский интерфейс сделать правильные вызовы для правильных DAO.На самом деле мне это больше нравится при использовании DTO.

Другие советы

Обычно внедряется сервисный уровень, который обертывает ваши DAO и обрабатывает подобные проблемы.Если вы боитесь, что добавляете слишком много шаблонного кода в свои DTO для обработки отложенной загрузки, возможно, использование AOP могло бы стать способом достижения этой цели.Возможно, вы захотите изучить AspectJ и weaving либо во время компиляции, либо во время загрузки.Поскольку вы бы изменяли байт-код напрямую, вам не пришлось бы беспокоиться о накладных расходах на производительность AOP на основе прокси.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top