С https://herbertograca.com/2017/07/28/architectural-styles-vs-architectural-patterns-vs-design-patterns/
Архитектурный стиль:
Архитектурные стили в очень общих чертах говорят нам, как организовать
наш код Это самый высокий уровень детализации, и он определяет
слои, модули высокого уровня приложения и как эти модули
и слои взаимодействуют друг с другом, отношения между ними.
Примеры архитектурных стилей:
Component-based
Monolithic application
Layered
Pipes and filters
Event-driven
Publish-subscribe
Plug-ins
Client-server
Service-oriented
Архитектурный рисунок:
Шаблон - это повторяющееся решение повторяющейся проблемы. В этом случае
архитектурных моделей, они решают проблемы, связанные с
Архитектурный стиль. Например, «какие у нас будут классы и как
будут ли они взаимодействовать, чтобы реализовать систему с определенным набором
слоев ", или" что модули высокого уровня будут иметь в нашем
Сервис-ориентированная архитектура и как они будут общаться "или" как
наша архитектура клиент-сервер будет иметь много уровней «.
Архитектурные шаблоны оказывают значительное влияние на базу кода, большинство
часто влияет на все приложение в горизонтальном направлении (т.е. как
структурировать код внутри слоя) или вертикально (т.е. как запрос
обрабатывается от внешних слоев до внутренних слоев и обратно).
Примеры архитектурных моделей:
Three-tier
Microkernel
Model-View-Controller
Model-View-ViewModel
Для меня это представляет собой дихотомию, аналогичную интерфейсу и реализации на уровне класса.
Другими словами, Стиль - это цель, а Шаблон - то, как вы достигаете этой цели
Пакеты Java служат двум целям, связанным с этим. Они используются для организации вашего кода и обеспечивают инкапсуляцию на уровне библиотеки с помощью public vs package-private.
Если вы используете стиль клиент-сервер, вам понадобится пакет для сервера и пакет для клиента, который можно использовать независимо.
Сервер и клиент, скорее всего, будут использовать общие POJO, которые вы захотите поместить в пакет, который будет разделен между ними.
Если вы используете стиль плагина, как тогда, вам понадобится пакет для общего интерфейса и загрузчика, но любые реализации будут идти в своем собственном пакете. Сравните с SLF4J и его реализацией.
И пакет загрузки плагина, и каждая реализация плагина должны совместно использовать небольшой пакет, содержащий интерфейс плагина.
Теперь, если вы выбираете стиль обслуживания, тогда у вас может быть только один пакет верхнего уровня для всей вашей услуги, но вы можете организовать подпакеты на основе разных доменов, например, пакет для базовой логики, который можно тестировать модулем без проблем с IO, и пакет, который связан с взаимодействием с IO. Другими словами, основной интерфейс связан только с объектами и методами, но пакет ввода-вывода занимается синтаксическим анализом запросов и печатью ответов.