• 设计原则篇之一(单一职责)


     

            所谓设计原则,就是在设计时必须遵守的原则。就个人学习过程来看,主要有SOLIDDRY两大类。那么首先说下SOLID原则。

       SOLID主要包括五种原则。单词中每个字母都代表一种原则。这五种原则分别是:

    SRP

    The Single Responsibility Principle 

    单一责任原则

    OCP

    The Open Closed Principle 

    开放封闭原则

    LSP

    The Liskov Substitution Principle

    里氏替换原则

    DIP

    The Dependency Inversion Principle

    依赖倒置原则

    ISP

    The Interface Segregation Principle

    接口分离原则

    单一职责原则(SRP

         解析:SRP被表述为”一个类应该有且只有一个变化的原因“,单一职责意味着每个类或者方法只做一件事情,该原则也是多数开发人员最容易理解但是也是最容易违反的一个原则。在ASP.NET MVC中,一个很好的例子,就是不同的显示接口对应不同的控制器。例如,HomeController就只应包含主页有关的操作,而ProductController应该只处理产品页面的操作。

    多功能与单变化

        对于单功能类来说,比较容易遵循SRP。例如:将繁体中文转换为简体中文的工具类。我们来看一个手机(Phone)类的例子,Phone具有2个功能:发短信,打电话。

    1 public class Phone{
    2 
    3     public void Message() {}
    4 
    5 public void MakePhone() {…}
    6 
    7 }

     

    我们先来考察一下Phone类的变化点,并将其分为两类:

    1.Phone类的内部细节变化,比如MessageMakePhone方法发生了变化;

    2.Phone类整体性的变化,比如Phone类需要增加PlayMovie方法。这个Phone类具有多个变化点,不符合SRP

    进一步抽象

        难道每个类都应该只有一个方法吗?当然不是。我们可以将每个方法提取到抽象中。下面代码是将方法提取到抽象中。

      

     1  public interface IMessage
     2 
     3    {
     4 
     5        void MessageMethod();
     6 
     7    }
     8 
     9    public class Message:IMessage
    10 
    11     {
    12 
    13         public void MessageMethod(){   }
    14 
    15 }
    16 
    17  
    18 
    19    public interface IMakePhone
    20 
    21    {
    22 
    23         void MakePhoneMethod();
    24 
    25    }
    26 
    27    public class MakePhone:IMakePhone
    28 
    29     {
    30 
    31         public void MakePhoneMethod()  { }
    32 
    33     }
    34 
    35  
    36 
    37    public class Phone
    38 
    39    {
    40 
    41        private IMessage message;
    42 
    43        public void MessageMethod()
    44 
    45        {
    46 
    47            message.MessageMethod();
    48 
    49        }
    50 
    51        private IMakePhone makePhone;
    52 
    53        public void MakePhoneMethod()
    54 
    55        {
    56 
    57            makePhone.MakePhoneMethod();
    58 
    59        }
    60 
    61    }

        上述方法将功能点抽取到单一的接口中,将变化封装到了稳定的接口背后,这样就避免了底层的变化传导到高层。如果想更好的运用单一职责原则,就必须理解好C#编程中的抽象。

         当下,正是单一职责盛行的时代,每个人都专精于某一个模块,需要多人协同合作,才能组成绚丽多彩的世界。代码写到一定程序,慢慢的我们就需要考虑一些设计原则,当然原则是以实际应用为基础的。

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    测试数据不会造?Fake Data!
    Go面试题汇总
    数据存储的 timestamp 时间正确 但是 Laravel 取出来的时间慢的 8 小时(Lumen timezone 时区设置方法(慢了8个小时))
    nginx php和html伪静态
    laravel DB操作
    深度学习_tensorflow-gpu安装:Win10-64bit+ NVIDIA GeForce MX150
    clickhouse SQL查询语句 【译自Github 英文文档】
    ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台
    elasticsearch max virtual memory areas vm.max_map_count [65530] is too low, increase to at le
    Pycharm 一键加引号
  • 原文地址:https://www.cnblogs.com/weilengdeyu/p/3501474.html
Copyright © 2020-2023  润新知