чи можна використовувати IoC та Rich Domain? Чи є їхні хороші приклади, проекти з відкритим кодом, які роблять це?
Я припускаю, що ви маєте на увазі DI замість IoC, а проект, над яким ви працювали, використовує контейнер DI на зразок Spring. IoC має два основних аромати: DI і Locator. Я не бачу, чому модель «Локатор» повинна бути проблемою, тож давайте зосередимось на DI.
Я не думаю, що це можливо, або, принаймні, це буде дуже недоцільно. Основним аспектом контейнерів DI є те, що вони контролюють створення об'єктів, коли вони вводять їх в інші ("керовані об'єкти"). Набір керованих об'єктів, що живе під час запуску проектів, не залежить від того, які елементи домену існують у вашому проекті, але залежить від того, яким чином об'єкти є проводними та які області (одиночний, прототип) їм призначені.
Ось чому ви не хочете дозволяти контейнеру DI керувати об'єктами вашого домену. Але якщо ви створюєте об’єкти вручну (з новими), ви не можете ін'єктувати інші об’єкти у ваші доменні об’єкти. (Залишаючи потенційні робочі місця з ручним електропроводкою убік.) Оскільки ці ін'єкції потрібні для заміни реалізацій на інші, ви не можете замінити функціональність об'єктів, що мають багатий домен, використовуючи DI. Отже, ви не хочете розміщувати функціональність в об’єктах домену, інакше ви втратите функції DI.
Я не бачу, як може працювати гіпотетичний контейнер DI, який не керує вашими об'єктами, і жодна з існуючих реалізацій цього не дозволяє. Тому справедливо стверджувати, що DI покладається на управління об'єктами. Тому завжди буде спокушати вас розділити потенційні об’єкти Rich Domain на один анемічний клас та один або кілька класів скриптів транзакцій.