Могу предложить следующую иерархию (структуру пакетов) в простом варианте, может выглядеть так:
com.example.application:
в нем следующие слои:
- domain - предметная область, видимая для сервисов и котроллеров (Проще говоря, здесь будут сущности которые будет отдавать Ваш сервис или использоваться котнтроллерами, напривем User(name, age))
- repository - Ваши DAO, DTO будут здесь, это уровень абстракции который инкапсулирует работу с конкретным хранилищем (хранилищами) данных
- service - прослойка с которой будет взаимодействовать приложение (приложения), ну а он с repository и формировать уже кокретный результат (всех User'ов и которые купили Слона за последних пол года)
- web (controller/ REST и т.д.) - обработчики, которые будут использовать ваши сервисы для процессинга данных или давать возможность другим приложениям взаимодействовать с вашими данными
соотвтественно в resourse выносим всю конфигурацию (контексты приложения, конфигурации, properties) и тоже желательно все по папочкам (фреймворки которые используются, например spring, hibernate, или же Java EE спецификация которая отвязывает нас, ну или пытаеться это сделать, от конкретных провайдеров) :)
Советую еще погуглить SOA/microservices
А также полезная статейка
Учимся проектировать на основе предметной области ...