После многих лет работы с многослойными архитектурами, лучшая практика - группировать классы таким образом, чтобы это имело смысл для вас и ваших разработчиков. Смотрите следующий пример:
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── bytesw
│ │ │ └── agreement
│ │ │ └── admin
│ │ │ ├── Application.java
│ │ │ ├── data
│ │ │ │ ├── bo
│ │ │ │ │ ├── Account.java
│ │ │ │ │ ├── Customer.java
│ │ │ │ │ ├── User.java
│ │ │ │ └── repository
│ │ │ │ ├── AccountRepository.java
│ │ │ │ ├── CustomerRepository.java
│ │ │ │ └── UserRepository.java
│ │ │ ├── exception
│ │ │ │ ├── DuplicatedRecordException.java
│ │ │ │ ├── NoResultException.java
│ │ │ │ └── UnknownErrorException.java
│ │ │ ├── web
│ │ │ │ └── controller
│ │ │ │ ├── AccountController.java
│ │ │ │ ├── CustomerController.java
│ │ │ │ └── UserController.java
│ │ │ └── service
│ │ │ ├── AccountService.java
│ │ │ ├── CustomerService.java
│ │ │ └── UserService.java
│ │ └── resources
│ │ ├── application.yml
│ │ ├── bootstrap.yml
│ │ ├── logback-spring.xml
│ │ └── messages
│ │ ├── message_es.properties
│ │ └── message.properties
Предыдущие примеры групповых классов в пакетах:
BO (Бизнес-объект)
Объекты, которые представляют данные
Исключение
Ваши собственные классы исключений
Веб-контроллер Если вы собираетесь строить отдых, все ваши контроллеры должны быть здесь.
Услуга
Ваши классы обслуживания при необходимости.
Ресурсы
Все ресурсы вашего приложения