如何在程序中正确表达作文?
How to express the composition correctly in program?
假设我们有 2 个 classes:Car 和 Engine。引擎取决于汽车——当汽车被摧毁时,引擎也取决于汽车。如何正确表达Engin对Car的依赖?关系是Engineclass在Car之外没有意义。在我看来,Engine 的注入表明在某种程度上独立于 Car。在这种情况下,哪个 Car 构造函数是正确的?有或没有 DI?
示例代码:
interface IEngine { }
class Engine : IEngine { }
class Car
{
private readonly IEngine _engine;
public Car()
{
_engine = new Engine();
}
public Car(IEngine engine)
{
_engine = engine;
}
}
您可以使用嵌套 class:
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;
}
}
这里有一些解释:
Nested Types (C# Programming Guide)
Why/when should you use nested classes in .net? Or shouldn't you?
两个想法:
架构可能会受到可测试性的影响。注入使得测试 class 变得更容易,因为可以注入模拟或存根。
假设过于严格的关系时要小心:引擎当然可以独立于汽车而存在,例如在工厂、维修店和回收中。轮胎等类似(这就是为什么我不会像 Olivier 建议的那样将其设计为内部 class。)
使用带 DI 的那个。
至于类比;如果您的汽车负责制造发动机;在某些时候很难更换引擎。即使您不更改实际类型(例如,从燃气到电动),更改构造函数也会给您带来一些问题。
当然汽车不依赖于发动机,反之亦然,嗯,具体的类型就是。
例如;
您可以拥有一辆带有假引擎的展示模型车。或用于超现代引擎的测试设施。
所以,如果可能的话:不要做新的(尤其是在使用接口时),而是使用 DI。尤其;当您处理实际硬件时 ;-)
假设我们有 2 个 classes:Car 和 Engine。引擎取决于汽车——当汽车被摧毁时,引擎也取决于汽车。如何正确表达Engin对Car的依赖?关系是Engineclass在Car之外没有意义。在我看来,Engine 的注入表明在某种程度上独立于 Car。在这种情况下,哪个 Car 构造函数是正确的?有或没有 DI?
示例代码:
interface IEngine { }
class Engine : IEngine { }
class Car
{
private readonly IEngine _engine;
public Car()
{
_engine = new Engine();
}
public Car(IEngine engine)
{
_engine = engine;
}
}
您可以使用嵌套 class:
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;
}
}
这里有一些解释:
Nested Types (C# Programming Guide)
Why/when should you use nested classes in .net? Or shouldn't you?
两个想法:
架构可能会受到可测试性的影响。注入使得测试 class 变得更容易,因为可以注入模拟或存根。
假设过于严格的关系时要小心:引擎当然可以独立于汽车而存在,例如在工厂、维修店和回收中。轮胎等类似(这就是为什么我不会像 Olivier 建议的那样将其设计为内部 class。)
使用带 DI 的那个。
至于类比;如果您的汽车负责制造发动机;在某些时候很难更换引擎。即使您不更改实际类型(例如,从燃气到电动),更改构造函数也会给您带来一些问题。
当然汽车不依赖于发动机,反之亦然,嗯,具体的类型就是。
例如; 您可以拥有一辆带有假引擎的展示模型车。或用于超现代引擎的测试设施。
所以,如果可能的话:不要做新的(尤其是在使用接口时),而是使用 DI。尤其;当您处理实际硬件时 ;-)