Модель домена.NET, когда нужно загружать
Я довольно новичок во всей.NET-сцене и все еще пытаюсь понять это.
Одной вещью, которая, кажется, очень защищена, является шаблон, управляемый доменом. И мне не терпелось начать с нуля в мире.NET, и я сделал все правильно, пытаясь применить его в своем проекте.
Как я понимаю, плохая практика - предоставлять объекту домена доступ к функциям персистентного уровня, таким как репозитории, но потом я действительно пытаюсь решить проблему загруженности при работе с сильно связанными графами. Обычно это заканчивается отсутствием логики в модели предметной области и перемещением всего этого на сервисный уровень, который выполняет вычисления и заполняет объекты модели данными или возвращает результат напрямую, например. price = productService.CalculatePriceFor(product, user);
вместо price = product.Price(user)
поскольку последнее не может быть выполнено без полной загрузки всего дерева группы продуктов и матрицы скидок при первом запросе объекта.
Что такое хорошая практика здесь? Реализовать подклассы продукта, где информация для получения пользовательской цены рассчитывается во время загрузки, и использовать другой подкласс, когда мне не нужна пользовательская цена?
1 ответ
В правильном DDD у вас нет сильно связанных графиков. Статья Вона Вернона о дизайне агрегатов должна помочь вам уловить эту идею.
http://dddcommunity.org/library/vernon_2011/
Также подумайте, принадлежат ли продукт и пользователь одному и тому же ограниченному контексту. Я бы сказал, что нет. В другом контексте могут быть похожие идеи, реализованные по-разному, например, в контексте цены, класс клиента может быть простым агрегатом, предоставляющим некоторые скидки, но без информации о доставке, счетах и т. Д. Однако, если в контексте доставки будет аналогичный пользовательский класс, являющийся только объектом значения (с адресом) в агрегате доставки. Пользовательский класс является частью контекста аутентификации.