阅读一些有关领域驱动设计的有趣书籍,其中一个示例如下:
// Order
IOrderNumberService orderNumberService;
public void Accept()
{
this.orderNumber = this.orderNumberService.GetNextAvailableNumber();
}
上面代码中没有显示的是,OrderNumberService
已经被 IoC 框架注入。我们不知道服务对象的生命周期范围(可以为每次注入创建一个新服务,或者每次注入一个单例)。
对于其工作是从数据库中检查下一个可用数字的服务,我认为不需要状态并且可以安全地(可能应该)使用单例。
对于这种情况,我认为不需要换掉这个服务,并且可以直接调用单例类的具体实现OrderNumberService.GetNextAvailableNumber()
,或者至少如果我需要使用一个接口进行抽象,我可以在以后随时重构。
除了从实现中抽象出服务接口允许更轻松的测试之外,注入服务还有其他好处吗?
我很谨慎地将我读过的所有东西都写进代码中,因为它们很酷——那么抽象在什么时候创建了这么多的层,使得代码更难阅读,应该注意哪些警告信号?