3 回答
TA贡献1812条经验 获得超5个赞
两个想法:
架构可能会受到可测试性的影响。注入使得测试类变得更加容易,因为可以注入模拟或存根。
假设过于严格的关系时要小心:发动机当然可以独立于汽车而存在,例如在工厂、修理店和回收中。轮胎等类似。(这就是为什么我不会像奥利维尔建议的那样将其设计为内部类。)
TA贡献1799条经验 获得超9个赞
使用带有 DI 的那个。
至于类比;您的汽车是否负责制造发动机;在某些时候很难改变引擎。即使您不更改实际类型(例如,将天然气更改为电力),更改构造函数也会给您带来一些问题。
当然,汽车并不取决于发动机,反之亦然,具体的类型也是如此。
例如; 您可以拥有一辆带有虚拟发动机的展示模型车。或者超现代发动机的测试设施。
因此,如果可能的话:不要做 new(尤其是在使用接口时),而是使用 DI。尤其; 当您处理实际硬件时;-)
TA贡献1821条经验 获得超4个赞
您可以使用嵌套类:
public interface IEngine
{
void SomeMethod();
}
public class Car
{
private class DefaultEngine : IEngine
{
void IEngine.SomeMethod()
{
throw new NotImplementedException();
}
}
private readonly IEngine _engine;
public Car()
{
_engine = new DefaultEngine ();
}
public Car(IEngine engine)
{
_engine = engine;
}
}
- 3 回答
- 0 关注
- 113 浏览
添加回答
举报