Можно ли использовать IoC и Rich Domain? Есть ли у них хорошие примеры, проекты с открытым исходным кодом, которые делают это?
Я предполагаю, что вы имеете в виду DI вместо IoC, а в проекте, над которым вы работали, используется контейнер DI, такой как Spring. IoC имеет два основных варианта: шаблон DI и шаблон Locator. Я не понимаю, почему шаблон локатора должен быть проблемой, поэтому давайте сосредоточимся на DI.
Я не думаю, что это возможно, или, по крайней мере, было бы очень непрактично. Основной аспект DI-контейнеров заключается в том, что они контролируют создание объектов, когда они внедряют их в другие («управляемые объекты»). Набор управляемых объектов, который действует во время выполнения проектов, не зависит от того, какие элементы домена существуют в вашем проекте, но зависит от того, как объекты связаны, и какие области (синглтон, прототип) назначены им.
Вот почему вы не хотите, чтобы DI-контейнер управлял вашими объектами домена. Но если вы создаете объекты вручную (с помощью new), вы не можете добавить другие объекты к объектам вашего домена. (Оставляя в стороне потенциальные обходные пути с ручным подключением.) Поскольку эти внедрения необходимы для замены реализаций другими, вы не можете заменить функциональность объектов расширенного домена с помощью DI. Следовательно, вы не захотите размещать функциональность в доменных объектах, иначе вы потеряете функции DI.
Я не понимаю, как может работать гипотетический DI-контейнер, который не управляет вашими объектами, и ни одна из существующих реализаций не позволяет этого. Поэтому справедливо утверждать, что DI полагается на управление объектами. Поэтому он всегда будет искушать вас разделить потенциальные объекты Rich Domain на один анемичный класс и один или несколько классов сценариев транзакций.