【发布时间】:2013-01-27 09:53:00
【问题描述】:
阅读了一些关于领域驱动设计的有趣书籍,示例如下:
// Order
IOrderNumberService orderNumberService;
public void Accept()
{
this.orderNumber = this.orderNumberService.GetNextAvailableNumber();
}
上面代码中没有显示的是OrderNumberService已经被一个IoC框架注入了。我们不知道服务对象的生命周期范围(可以为每次注入创建一个新服务,或者每次注入一个单例)。
对于一个工作是从数据库中检查下一个可用数字的服务,我认为不需要状态并且可以安全地(可能应该)使用单例。
对于这种情况,我认为不需要换出这个服务,并且可以直接调用单例类的具体实现OrderNumberService.GetNextAvailableNumber(),或者至少如果我需要使用一个接口进行抽象,我总是可以重构在那个时候晚些时候。
除了从实现中抽象出服务接口以便于测试之外,注入服务还有其他好处吗?
我很谨慎地将我读过的所有内容都放入代码中,因为它们很酷 - 那么抽象在什么时候创建了如此多的层,这使得代码更难阅读,应该注意哪些警告信号?
【问题讨论】:
-
虽然对于实体/AR方法中使用的服务(和其他对象)有不同的看法,但我认为实体不应该对外界非常熟悉:) --- 也许@在这种情况下,987654324@ 或
public void Accept(string orderNumber)就足够了。
标签: architecture domain-driven-design inversion-of-control