как реализовать сервисы и репозитории на луковой архитектуре?

Я пару дней изучал луковую архитектуру. Я понимаю, что зависимости всегда должны идти к центру, и как для этого использовать внедрение зависимостей. Но у меня есть пара вопросов, которые я до сих пор не могу понять.

  1. Может ли модель (или объект )ссылаться на интерфейс репозитория или сервисный интерфейс?

    Например, :объект 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;
            }
        }
       ...
    }
    
  2. Какие проблемы могут быть у приведенного выше кода? Должен ли он вместо этого использовать службу домена?

  3. Должны ли реализации доменных служб определяться внутри ядра или на уровне инфраструктуры?

7
задан drew moore 14 January 2016 в 01:47
поделиться