您好我正在尝试将SOLID原则应用于我的代码,直到我遇到了接口和依赖性倒置。
我遇到了FlightValidator类的构造函数问题。 请问建议?在这里输入代码
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
}
答案 0 :(得分:2)
我对这堂课很困惑。我如何创建它的实例?
您可以将依赖项传递给构造函数:
IValidator validator = ...
FlightValidator flightValidator = new FlightValidator(validator);
或者,如果您正在使用IoC容器(例如Unity):
FlightValidator flightValidator = container.Resolve<FlightValidator>();
无论如何,我发现你的代码有点令人困惑。你的FlightValidator
类取决于IValidator
,它本身有一个FlightValidator
方法(顺便说一下方法名称非常糟糕)......那么FlightValidator
类是什么好的,如果它只是调用另一个进行飞行验证的东西?
答案 1 :(得分:0)
您在这里看到的是 Dependency Injection 。一般的想法是从类中删除依赖项,并通过构造函数注入所述依赖项。这样,您的班级可以减少责任,促进重复使用,从而产生更多敏捷解决方案。
要实例化此类,您可以使用穷人的依赖注入,如下所示:
IValidator myValidator = new SomeValidator();
FlightValidator flightValidator = new FlightValidator(myValidator, 69);
要获得更优雅的方法,您可以使用 Inversion of Control 。