Вы не правы.- Вы можете пропустить DAO, DAOImpl и ServiceImpl, если хотите внедрить все в классе обслуживания.
Но даже в EJB рекомендуется разделять службу и DAO.
Использование интерфейсов - это своего рода стиль.Если вы используете интерфейсы, по крайней мере, вы можете пропустить их и создать свои сервисы (и Dao), такие как EJB 3.1, свободный от интерфейса EJB ( Я не знаю правильное имя на данный момент ).По крайней мере, есть те же плюсы и минусы для использования интерфейсов в Spring и EJB 3.1.
Резюме: вы можете создавать приложения Spring JSF2 с двумя классами, но рекомендуется разделять хотя бы JSP(просмотр), Служба (EJB) и DAO.
комментарий Spring или JSF : Ральф, приведите мне примерПредположим, у меня есть сущность: Person с id, firstName и lastName. Какой будет код, который мне нужен с точки зрения Spring?
В традиционной архитектуре Spring у вас есть:
- Класс Person (Entity) - класс с @ Entity
- PersonDao - интерфейс, обеспечивающий методы загрузки, обработки, удаления и поиска в базе данных для Person
- PersonDaoImpl - реализацияPersonDao Interface - (@Repository)
- PersonService - Интерфейс, который обеспечивает деловую функциональность вокруг человека, например, метод создания, который отправляет электронное письмо после создания человека
- PersonServiceImpl- Реализация интерфейса PersonService - он использует, например, PersonDao и другие сервисы для предоставления своей функциональности (@Service)
- PersonJSF-Managed Bean - обрабатывает JSF, но не имеет бизнес-функциональности, он использует PersonService (или другой Сервис) для запуска бизнес-функций
Это один из наиболее распространенных архитектурных стилей (не только в Spring).Но даже для этого есть несколько вариантов:
- как можно вызывать DAO?Все функции Dao должны вызываться через соответствующую службу - или напрямую
- DAO с интерфейсами или без них?(вам могут понадобиться интерфейсы для вашей тестовой среды Mock Framework?) - (посмотрите на Hades , есть только интерфейс, но в большинстве случаев нет Impl)
- Службы с илибез интерфейсов?(
- ...
Кстати: еще один очень интересный стиль архива, это одна шляпа Spring ROO использует: Он имеет только вид(PersonController) и модель (Person), а также все DAO и функциональные возможности сервиса помещены в класс Model. - Это что-то вроде реального OO Design.