2015-04-01 3 views
0

Я пытаюсь выяснить, где разместить мои классы полезности в проекте на основе DDD. Дело в следующем:Размещение классов полезности в DDD

У меня есть класс CookieAwareWebClient, который необходим для работы ядра. Формируйте то, что я читал в Интернете, это похоже на класс, который принадлежит к уровню инфраструктуры, однако не следует ссылаться на уровень инфраструктуры из уровня Core. Это означает, что я не могу разместить функциональные возможности, на которых зависит уровень ядра в уровне инфраструктуры. Где же должен быть размещен этот класс CookieAwareWebClient?

+1

Название явно звучит в быть частью инфраструктуры. Без дальнейшего знания вашего кода и приложения я бы сказал, что у вас проблемы с дизайном, когда ваше ядро ​​зависит от этого класса. – Jehof

+0

@Jehof Зависимость от этого класса связана с классом обслуживания в ядре Core, который извлекает данные из API и возвращает указанные данные вызывающему приложению. Я решил, что в этом случае хранилище будет только чрезмерным. Как вы думаете? – Maritim

+1

Таким образом, CookieAwareWebClient используется для вызова внешней службы, от которой зависит ваше ядро. Это правильно? – Jehof

ответ

1

Без понимания именно то, что вам нужно сделать, я считаю, что @plalx суммирует это в комментариях:

  • Установите интерфейс, который обеспечивает функциональные возможности, что ваш основной уровень требует
  • реализует этот интерфейс в CookieAwareWebClient
  • Использование Dependency Inversion, чтобы позволить ядро ​​использовать CookieAwareWebClient

Вот некоторый код (C# в данном случае) с строител инъекция т е р в качестве примера:

Интерфейс:

namespace Core 
{ 
    public interface IBlah 
    { 
    int SomethingCoreNeeds(); 
    } 
} 

Реализация по CookieAwareWebClient:

namespace Services 
{ 
    public class CookieAwareWebClient : IBlah 
    { 
    // ... rest of class 
    private int _somethingCookieAwareWebClientHasThatCoreNeeds; 

    public int SomethingCoreNeeds() 
    { 
     return _somethingCookieAwareWebClientHasThatCoreNeeds; 
    } 
    // ... rest of class 
    } 
} 

Служба потребляющих в вашем Ядра:

namespace Core 
{ 
    public class DomainService 
    { 
    private readonly IBlah _blah; 

    public DomainService(IBlah blah) 
    { 
     _blah = blah; 
    } 

    public void DoSomething(DomainEntity entity) 
    { 
     entity.NeededValue = _blah.SomethingCoreNeeds(); 
    } 
    } 
} 
Смежные вопросы