65.9K
CodeProject 正在变化。 阅读更多。
Home

用通俗易懂的语言解释 SOLID 原则:单一职责

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.67/5 (13投票s)

2014 年 2 月 10 日

CPOL

4分钟阅读

viewsIcon

22095

用通俗易懂的语言解释 SOLID 原则:单一职责

目的: 我计划撰写关于 SOLID 软件开发原则的文章。具体来说,我的目标是让其他开发人员更容易理解这些原则,就像我一样,觉得破译关于此事的冗长、复杂的文章和书籍很麻烦。这些原则是供所有人学习和使用的,但我发现它们很难完全掌握;很可能是因为我来自非英语国家。因此,通过这一系列文章,我希望以最好的意图来揭开这些原则的神秘面纱。这些原则适用于软件开发的许多层面。在我的文章中,我特别旨在描述它们与编程的关系。我希望这对您有用。感谢您的光临。

这将是关于 SOLID 的一个 5 篇文章的系列。SOLID 非常流行;至少就我正在阅读的招聘广告而言是这样;“您需要遵守 SOLID 原则”等等。那么 SOLID 到底是什么?简而言之,它是开发面向对象系统的一组指导方针。它们是一组概念,已被证明对许多编写大量软件的人来说很有价值。 这是您在软件工程领域的前辈们讲述的故事,如果您想在您的简历上吹嘘您精通 SOLID 原则,那么您会想注意它 - 并且您会成为一个更好的开发人员,我向您保证。 事实上,仅仅_想要_ 了解它们,您就已经是一个更好的开发人员了!

[S]OLID - 单一职责原则

单一职责是构成 SOLID 缩写词的原则集中的第一个原则。 它指出一个类应该只做一件事情。而且只有一件事。

为什么这是一件好事? 因为让一个类做太多事情所产生的混乱会对您尝试设计的任何东西造成长期损害。

正如丹麦这里所说的那样,“把你的购物袋塞得太满,你就是个傻瓜”。 好吧,也许这不是一个官方的说法,但这个类比会起作用:如果你在你的购物袋里放太多的东西,它很可能会在把手上断裂,或者你在里面放了太多的东西,以至于你无法拿到回到车里想吃的巧克力棒,或者你正在努力拿着袋子,把车钥匙掉在街上……你明白了。 你的类也是如此:如果你在里面放太多东西,就会有风险。

这就是单一职责的意义:让你的类只做一件事情。

下面列出了不遵守该原则的主要风险,以及遵守该原则的好处。 但首先让我们讨论一下如何实现该原则。 这非常基本。

  1. 查看您的类,并寻找那些执行两个或多个不同操作的类。 例如:你是否有一个类可以渲染一个对象并将其保存到磁盘? 不好 - 该类所做的事情不仅仅是“做一件事情”。 例如,使用下面的示例...

     

    public class Logger
    {
        public Logger()
        {
        }
    
        public void WriteLog(string message)
        {
            // do something to write the message to disk log
        }
    
        public void GenerateLoggingStatistics()
        {
                // do something to retrieve some stats
        }
    }

    ... 让我们找到一个 Logging 类,它可以写入日志文件能够生成一些日志统计信息。

  2. 遍历您类的方法,并问自己“为什么这个方法属于这里?”。 我知道这听起来微不足道,但我自己也被抓住过很多次,并付出了惨痛的代价。 例如,你是否有一个如下所示的日志记录组件

     

    public class Logger
    {
        public Logger()
        {
        }
    
        public void WriteToDiskLog(string message)
        {
            // do something to write the message to disk log
        }
        public void WriteToEventLog(string message)
        {
            // do something to write the message to the event log
        }
    }

    上面有两个“WriteTo”方法,可以将日志消息分别写入物理磁盘和 Windows 事件日志。 这在一种更微妙的方式中也违反了单一职责原则 - 该类不应该知道如何写入两种不同类型的日志存储 - 这不属于其主要功能。 将日志存储职责转移到它们自己的类中,并让它们符合日志记录组件可以遵循的接口。

所以你想要保持你的类简短。拥有大量的小类而不是少数几个大的类并不是一个危险信号 - 恰恰相反。保持它们简短精干。

就是这样 - 这就是单一职责原则,五个原则中的第一个。 并不是非常困难,但这就是这些原则的美妙之处,它们易于学习但难以掌握。 我最好将应用该原则的缺点描述为“瑞士军刀类”; 如果你在遍历你自己的时候保持这种形象,你肯定会避免最终得到那些“万事通”类。 作为一个额外的积极因素,精简的类更容易测试、更容易阅读、更容易维护。 这就是单一职责原则的全部意义所在。

© . All rights reserved.