sdg*_*sdh 2 oop design-patterns dependency-injection
我正在使用C#,但我的问题适用于任何OOP语言.
我有许多不同的对象,它们使用一系列服务.我想访问这些服务的方式来满足一些约束,但我正在努力找出一个好的设计.
我认为这些都是很好的目标,但事实证明它们难以实现.我目前的方法是一种依赖注入:
class MyObject
{
// ...
public MyObject(IFooService fooService, IBarService barService)
{
this.fooService = fooService;
this.barService = barService;
}
}
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但是当我有很多服务依赖项时会发生什么?我有几十个对象,其中一些需要访问许多服务.
我考虑构建一个"服务容器"对象并将其传递给:
class Services
{
// ...
public IFooService FooService
{
get { return this.fooService; }
}
public IBarService BarService
{
get { return this.barService; }
}
public Services(IFooService fooService, IBarService barService)
{
this.fooService = fooService;
this.barService = barService;
}
}
class MyObject
{
// ...
public MyObject(Services services)
{
this.services = services;
}
}
Run Code Online (Sandbox Code Playgroud)
这节省了输入,但它模糊了对象实际使用的服务.给定构造函数,MyObject可以使用它们中的任何一个!
这可能表明存在两个问题
无论如何,如果你认为你的课程不是太复杂,你可以阅读,维护和测试它,我不会太多关于依赖的数量.我更喜欢拥有清晰,明确的依赖关系,而不是依赖于作为服务工厂并取决于所有事物的上帝对象.这将损害可测试性和可读性.