实用程序类在DDD中的位置

时间:2015-04-01 12:09:47

标签: domain-driven-design

我试图找出将我的实用程序类放在基于DDD的项目中的位置。案例如下:

我有一个名为CookieAwareWebClient的类,它是核心工作所必需的。从我在线阅读的内容看来,这似乎属于基础架构层中的一个类,但是不应该从Core层引用基础架构层。这意味着我无法在基础架构层中放置Core层所依赖的功能。那么这个CookieAwareWebClient类应该放在哪里?

1 个答案:

答案 0 :(得分:1)

如果不完全理解你需要做什么,我相信@plalx会在评论中总结出来:

  • 建立一个提供核心层所需功能的界面
  • 在CookieAwareWebClient中实现此接口
  • 使用依赖性反转允许Core使用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 
  }
}

Core中的消费服务:

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

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

    public void DoSomething(DomainEntity entity)
    {
      entity.NeededValue = _blah.SomethingCoreNeeds();
    }
  }
}