Я изучаю лунную архитектуру в течение нескольких дней. Я понимаю, что зависимости всегда должны идти к центру и как использовать инъекции зависимостей для достижения этого. Но у меня есть пара вопросов, которые я все еще не мог понять.Как реализовать службы и репозитории на архитектуре лука?
Может ли модель (или сущность) ссылаться на интерфейс репозитория или интерфейс службы?
Например:
Order
предприятие имеетDeliveryCity
отношения, установленные черезOder.DeliveryZip
имущество, которое не внешний ключ, но является уникальным. Для того, чтобы получить город на молнии, я должен позвонитьICityRepository.FindByZip(zip)
У меня есть следующий код в моей модели
class Order { . . . [Inject] public ICityRepository CityRepository { get; set; } private City _dCity; public City DeliveryCity { get { if (_dCity == null) _dCity = this.CityRepository.FindByZip(this.DeliveryZip); return _dCity; } } . . . }
Что бы проблемы в коде выше? Следует ли вместо этого использовать службу домена?
Должны ли реализации служб домена быть определены внутри ядра или на уровне инфраструктуры?
Это имеет смысл! Я спрашиваю себя: «Как я мог пропустить это?»! Благодаря! – svallory
Это ошибка. Завод DDD не несет ответственности за восстановление. Реконституция - это средняя жизнь объекта, Фабрика касается только начала жизни. См. Этот ответ: http://stackoverflow.com/a/10264669/625332 – Dmitry
Я не согласен. Фабрики используются для создания экземпляров объекта. Они могут быть в начале жизненного цикла объекта или использоваться для восстановления. Они могут быть одного класса с двумя методами или двумя разными классами. В любом случае, я согласен, что есть разница в том, как завод ведет себя в каждом случае. Обычно у меня есть завод по восстановлению в качестве зависимости репозитория, который делегирует фабрике создание и восстановление нового экземпляра с данными, полученными из хранилища данных. Для получения дополнительной информации см. Evans pg 145: «Восстановление сохраненных объектов» – SonOfPirate