是我对单一责任原则正确的想法

  • 本文关键字:原则 单一 责任 c# .net oop
  • 更新时间 :
  • 英文 :


我今天开始学习扎实的原则,并想要一些建议,以了解我是否真的了解了S原理(单一可重复性(。

在我实施S原理之前,我的代码是。

class Engine : Engine
{
    public void Start()
    {
        // business logic...
    }
}
class Car 
{
    private readonly Engine _engine;
    public Car(Engine engine)
    {
        _engine = engine;
    }
    public void Start()
    {
        _engine.VerifyEngine();
        _engine.CheckHeat();
        _engine.Start();
    }   
}

实施S规则后,我的代码就是这个。请注意,我还减少了与引擎类并使用IENGINE的连接。

interface IEngine
{
    void Start();
}
class Engine : IEngine
{
    public void Start()
    {
        _engine.VerifyEngine();
        _engine.CheckHeat();
        // business logic...
    }
}
class Car 
{
    private readonly IEngine _engine;
    public Car(IEngine engine)
    {
        _engine = engine;
    }
    public void Start()
    {
        _engine.Start();
    }   
}

两个备注:

  • S原则的关键更改是您决定将引擎初始化细节放在引擎类本身的start((方法中。好。

  • 引入IENENGINE界面也是一个合理的决定。这样做,您可以让任何"引擎"课程做自己的工作,而无需"汽车"不得不打扰其内部设备。汽车唯一需要知道的是它可能启动((引擎。

您需要更改的一件事是verifyEngine((和chackheat((的方式。您的设置不会编译,因为您的引擎类中没有_ENGINE属性。verifyEngine((和chackheat((实际上是引擎的私人方法。

另外,您的两个引擎状态验证可能会产生布尔结果,并且start((也可能产生布尔结果,例如:

class Engine : IEngine
{
  private bool VerifyEngine()
  { return true; }
  private bool CheckHeat()
  { return true; }
  public bool Start()
  {
    if (VerifyEngine() && CheckHeat())
    {
      // business logic...
      return true;
    }
    return false;
  }
}

最新更新