Я логически разделяю их, основываясь на их заботе.Смысл наличия уровня доступа к данным, уровня обслуживания и т. Д. Заключается в разделении интересов.Я склонен идти немного за борт, но я делаю что-то похожее на:
app
--model
----PersonEntity.java (JPA annotated entity)
--service
----PersonService.java (interface)
--web
----PersonController.java (SpringMVC Controller, Struts action, etc.)
--internal
----PersonServiceImpl.java (Contains JPA EntityManager, e.g.)
То есть, если вы намерены оставить все в одном проекте.Я бы, вероятно, разделил код сервиса и модели в свой собственный проект, в случае (например) вы могли бы написать отдельный веб-сервис и повторно использовать ту же модель домена.
К вашему сведению, я не фанатDAO, но они довольно распространены.Я не уверен, куда бы я положил дао, но я бы, вероятно, следовал тому же соглашению.Дополнительный пакет - это просто еще одна папка, она не важна и имеет смысл максимально упорядочить ваш код.