Я знаю, что это старый пост, но хотел добавить. Сущность домена не должна сохраняться сама по себе, даже если вы передаете абстрагированный репозиторий в ctor. Причина, по которой я высказываю предположение, заключается не только в том, что она нарушает SRP, но и противоречит агрегации DDD. Позвольте мне объяснить, DDD подходит для сложных приложений с глубокими графами, поэтому мы используем агрегированные или составные корни для сохранения изменений в базовых «потомках», поэтому, когда мы внедряем постоянство в отдельных детей, мы нарушаем отношения, которые дети имеют к составной или совокупный корень, который должен «отвечать» за жизненный цикл или агрегацию. Конечно, составной корень или агрегат также не сохраняют свой собственный граф. Еще одна проблема с внедрением зависимостей объектов DDD заключается в том, что внедренный объект домена фактически не имеет состояния, пока не произойдет какое-либо другое событие для увлажнения его состояния. Любой потребитель кода будет вынужден сначала инициировать или настроить объект домена, прежде чем он сможет вызвать деловое поведение, которое нарушает инкапсуляцию.

имаю концепцию, лежащую в основе DI, но я просто изучаю, что могут делать разные контейнеры IoC. Кажется, что большинство людей выступают за использование контейнеров IoC для подключения служб без сохранения состояния, но как насчет использования их для объектов с состоянием, таких как объекты?

Правильно это или нет, я обычно наполняю свои сущности поведением, даже если это поведение требует внешнего класса. Пример:

public class Order : IOrder
{

    private string _ShipAddress;
    private IShipQuoter _ShipQuoter;

    public Order(IOrderData OrderData, IShipQuoter ShipQuoter)
    {
        // OrderData comes from a repository and has the data needed 
        // to construct order
        _ShipAddress = OrderData.ShipAddress;  // etc.
        _ShipQuoter = ShipQuoter;

    }

    private decimal GetShippingRate()
    {
        return _ShipQuoter.GetRate(this);
    }
}

Как вы можете видеть, зависимости - это Constructor Injected. Теперь пара вопросов.

Считается ли плохой практикой зависимость ваших сущностей от внешних классов, таких как ShipQuoter? Устранение этих зависимостей, кажется, ведет меня к анемичной области, если я правильно понимаю определение.

Является ли плохой практикой использование контейнера IoC для разрешения этих зависимостей и создания сущности при необходимости? Можно ли это сделать?

Спасибо за понимание.

Ответы на вопрос(2)

Ваш ответ на вопрос