C# 将实体原理应用于基本应用程序
嗨,我正在尝试将这个坚实的原则应用到我的代码中,直到我遇到了接口和依赖项反转 我只是在FlightValidator类的构造函数方面遇到了问题。 请在这里输入代码C# 将实体原理应用于基本应用程序,c#,c#-4.0,solid-principles,C#,C# 4.0,Solid Principles,嗨,我正在尝试将这个坚实的原则应用到我的代码中,直到我遇到了接口和依赖项反转 我只是在FlightValidator类的构造函数方面遇到了问题。 请在这里输入代码 you can get the full project here: https://www.sendspace.com/file/zk022f 我对这门课感到困惑。在中,如何创建它的实例 public class FlightValidator { private IValidator _validator; pr
you can get the full project here: https://www.sendspace.com/file/zk022f
我对这门课感到困惑。在中,如何创建它的实例
public class FlightValidator
{
private IValidator _validator;
private GeneralFlightValidation _generalFlightValidation;
private BasicFlightValidation _basicFlightValidation;
private int flightRuleType;
public FlightValidator(IValidator _validator,
int flightRuleType
)
{
this._validator = _validator;
this.flightRuleType = flightRuleType;
}
public void GetFlightRule(ScheduledFlight scheduledFlight)
{
switch(this.flightRuleType)
{
case (short)FlightRuleType.STANDARD:
{
this._validator.FlightValidator(scheduledFlight);
break;
}
case (short)FlightRuleType.BASIC:
{
this._validator.FlightValidator(scheduledFlight);
break;
}
default:
{
this._validator.FlightValidator(scheduledFlight);
break;
}
}
}
}
public enum FlightRuleType : int
{
STANDARD,
BASIC
}
我对这门课感到困惑。在中,如何创建它的实例
public class FlightValidator
{
private IValidator _validator;
private GeneralFlightValidation _generalFlightValidation;
private BasicFlightValidation _basicFlightValidation;
private int flightRuleType;
public FlightValidator(IValidator _validator,
int flightRuleType
)
{
this._validator = _validator;
this.flightRuleType = flightRuleType;
}
public void GetFlightRule(ScheduledFlight scheduledFlight)
{
switch(this.flightRuleType)
{
case (short)FlightRuleType.STANDARD:
{
this._validator.FlightValidator(scheduledFlight);
break;
}
case (short)FlightRuleType.BASIC:
{
this._validator.FlightValidator(scheduledFlight);
break;
}
default:
{
this._validator.FlightValidator(scheduledFlight);
break;
}
}
}
}
public enum FlightRuleType : int
{
STANDARD,
BASIC
}
您可以将依赖项传递给构造函数:
IValidator validator = ...
FlightValidator flightValidator = new FlightValidator(validator);
或者,如果您使用的是IoC容器(例如Unity):
FlightValidator FlightValidator=container.Resolve();
无论如何,我发现你的代码有点混乱。您的
FlightValidator
类依赖于一个IValidator
,它本身有一个FlightValidator
方法(顺便说一句,这个方法的名称很糟糕)。。。那么FlightValidator
类有什么用呢,如果它只是调用另一个进行飞行验证的东西呢?您在这里看到的是。一般的想法是从类中删除依赖项,并通过构造函数注入所述依赖项。这允许您的类承担更少的责任,促进重用,从而产生更敏捷的解决方案
要实例化此类,可以使用poor man的依赖项注入,如下所示:
IValidator myValidator = new SomeValidator();
FlightValidator flightValidator = new FlightValidator(myValidator, 69);
要获得更优雅的方法,可以先使用。。你为什么会有那个switch语句?它不等于
\u validator.FlightValidator(scheduledFlight)代码>?我正在尝试让用户在他们想要的规则中进行选择chosei在将其传递给_GeneralLightValidation和_GeneralLightValidation时遇到问题,我仍处于启用状态。我忘记更改方法名称。好的,你提到了IValidator validator=…>什么类?让我困扰的是你的FlightValidator
类似乎并没有真正验证航班。而GetFlightRule
方法的名称意味着它应该返回一些东西(一条飞行规则),但其返回类型为void。FlightValidator
类应该做什么?