Идеально подходит?Нет такой вещи.Если вам нужно спросить здесь, это, вероятно, неправильно.И даже если он «идеален» прямо сейчас, это не будет разом, и энтропия овладеет им.
Мера того, насколько хорошо вы это сделаете, придет, когда придет время его расширять.Если ваши изменения проскочили, у вас все получилось.Если вам кажется, что вы боретесь с унаследованным кодом, чтобы добавить изменения, выясните, что вы сделали не так, и выполните рефакторинг.
Недостатки?Сложно сказать.У меня нет энергии, времени или мотивации, чтобы копать очень глубоко прямо сейчас.
Не могу понять, что вы подразумеваете под # 3.
Типичное наслоение будет выглядеть таксо стрелками, показывающими зависимости:
view <- controller -> service +-> model <- persistence (service knows about persistence)
Для каждого слоя существуют сквозные проблемы:
- представление знает о представлении, стилизации и локализации.Он делает все возможное, чтобы улучшить взаимодействие с пользователем, но не включает бизнес-правила.
- Контроллер тесно связан с просмотром.Он заботится о связывании и проверке запросов от просмотра, маршрутизации к соответствующей службе, обработке ошибок и маршрутизации к следующему представлению.Вот и все.Бизнес-логика принадлежит сервису, потому что вы хотите, чтобы она была одинаковой для веб-сайтов, планшетов, мобильных устройств и т. Д.
- Сервис - это место, где живет бизнес-логика.Он заботится о проверке в соответствии с бизнес-правилами и сотрудничестве с уровнями модели и персистентности для выполнения сценариев использования.Он знает о вариантах использования, единицах работы и транзакциях.
- Объекты модели могут быть объектами значений, если вы предпочитаете более функциональный стиль, или вам предоставляется более богатая бизнес-логика, если вы так склонны.
- постоянство изолирует все взаимодействия с базой данных.
Вы можете рассматривать такие сквозные проблемы, как безопасность, транзакции, мониторинг, ведение журналов и т. д., как аспекты, если вы используете такую среду, как Spring, которая включает аспектно-ориентированное программирование.