Использование модели в качестве GenericDAO - PullRequest
1 голос
/ 22 января 2012

я использую игровую рамку с 2 лет.В фреймворке есть функция "JPA on streoids".Мне очень понравилось.

http://www.playframework.org/documentation/1.2.4/5things

Это пример кода:

User connectedUser = User.find("byEmail", connected()).first();
...
connectedUser.delete();
...
connectedUser.save();

Этот подход использует множество вспомогательных методов.Некоторые из них являются статическими методами.Каждый файл модели расширяет класс Model и вуаля.Вы можете использовать поиск, сохранение, удаление, получение ...

В настоящее время я использую Spring MVC 3.1.Мне нравится его использование MVC.Но система подключения немного сложна.

Я прочитал много статей.Некоторые из них используют слой сервиса, слой дао и слой модели.Некоторые из них используют только слой дао и слой модели.Некоторые создают интерфейсы DAO и классы DAO для каждого отдельного объекта модели, а также классы обслуживания и интерфейсы обслуживания.И некоторые из них используют общие классы DAO.

На самом деле я немного запутался во всех этих вариантах.

  • Почему мы используем слой DAO.Одного класса hibernateUtil и именованных запросов недостаточно для операций CRUD.
  • Почему мы не используем подход со структурой воспроизведения?
  • Почему мы используем интерфейсы для каждого класса DAO?Просто реализации недостаточно?
  • Почему мы используем ненужный сервисный уровень?

1 Ответ

4 голосов
/ 22 января 2012

Уровень DAO полезен для изоляции кода доступа к данным от кода бизнес-логики. Это особенно полезно, когда вы начинаете модульное тестирование бизнес-логики, потому что это позволяет высмеивать DAO. Все приложения не просто имеют CRUD-операции.

Интерфейсы имеют те же преимущества в тестируемости. Прочитайте какие существуют причины для использования интерфейсов (Java EE или Spring и JPA) , где я объясняю преимущества наличия интерфейсов.

Уровень обслуживания является наиболее важным уровнем. Это тот, который используется для разграничения транзакций. Вы можете избегать использования уровня DAO, особенно если у вас очень простой доступ к данным типа crud. Но уровень обслуживания имеет решающее значение. Вы не хотите иметь три вставки и одно обновление в каждой отдельной транзакции. См. Шаблон проектирования DAO и сервлеты , где я могу объяснить, почему сервисный уровень так важен.

...