Щоб по-справжньому ізолювати ділову логіку та зробити її відокремленою від інфраструктури рівня презентації, її слід інкапсулювати службами прикладних програм. Архітектура MVC - це спосіб реалізувати презентаційний рівень, і він повинен залишатися в цій області, делегуючи всю ділову логіку цим службам прикладних програм. Подумайте про моделі перегляду як адаптери між поданням та даними, які потрібно відображати та читати. Контролер опосередковує взаємодію між моделями перегляду, переглядами та службами додатків, які розміщують бізнес-логіку.
Служби прикладних програм реалізують випадки використання бізнесу та відокремлюються від шару презентації, будь то MVC або щось інше. У свою чергу, сервіси додатків можуть розміщувати сценарії транзакцій або дизайн, керований доменом .
Для зберігання служба додатків може посилатися на сховище або будь-яку абстракцію стійкого механізму. Різні реалізації можна підтримувати, абстрагуючи доступ до даних в інтерфейс. Зазвичай ці абстракції є герметичними і лише частково переносяться в різних реалізаціях, і це часто марна спроба досягти повної портативності.
ОНОВЛЕННЯ
Моя пропозиція заснована на шестикутній архітектурі . У шестикутній архітектурі ваша доменна модель (бізнес-логіка) лежить в основі. Це ядро інкапсульовано прикладними службами, які виконують роль фасаду . Прикладні сервіси - це прості класи, у яких є методи, що відповідають випадкам використання у вашому домені. Для поглибленої дискусії щодо прикладних служб подивіться Служби в дизайні, керованому доменом . Зразок коду містить PurchaseOrderService
сервіс, який представляє собою додаток для придбання домену. (Зауважте, що служба прикладних програм не передбачає використання дизайну, керованого доменом.)
У шестикутній архітектурі шар презентації MVC є адаптером між вашою моделлю домену (бізнес-логіка) та графічним інтерфейсом. Модель домену не знає шару презентації, але шару презентації відомо про доменну модель.
Це рішення, безумовно, має рухомі частини, ніж рішення, яке розміщує ділову логіку в контролері, і ви повинні зважити недоліки та переваги. Причина, яку я пропоную, полягає в тому, що я віддаю перевагу, щоб ділова логіка не була відокремлена від шару презентації, щоб боротися зі складністю. Це стає важливішим у міру зростання програми.