将SOLID原则应用于基本应用程序

时间:2015-11-02 10:48:38

标签: c# c#-4.0 solid-principles

您好我正在尝试将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
}

2 个答案:

答案 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