Single responsibility principle [单一职责原则又称单一功能原则]
面向对象的七种设计原则:
1. Single responsibility principle [单一职责原则又称单一功能原则]
2. OCP:Open Closed Principle [开闭原则]
3. LSP:Liskov Substitution Principle [里氏替换原则]
4. DIP:Dependence Inversion Principle [依赖倒转原则]
5. ISP:Interface Segregation Principle [接口分离原则]
6. CRP:Composite Reuse Principle [合成复用原则]
7. LOD:Law of Demeter [迪米特原则]
我们今天先讨论下这个【单一职责】
单一职责的核心与描述
核心:解耦和增强内聚性(高内聚,低耦合)
描述:类被修改的几率很大,因此应该专注于单一的功能。如果你把多个功能放在同一个类中,功能之间就形成了关联,改变其中一个功能,有可能中止另一个功能,这时就需要新一轮的测试来避免可能出现的问题
理解:
第一: 类专注于单一功能,这个很容易理解,就是一个类就做一件事情,例如: 菜刀类就切菜,别把砍柴啊,铲土啊等等都放进去。
第二: 功能之间形成了关联,改变其中一个功能就有可能影响另外的功能。举个简单的例子:
class caidao {
protected c_name;
protected c_color;
function qiecai($name, $color) {
$this->c_name = $name;
$this->c_color = $color;
echo c_name . ';;;;' . c_color;
}
function kanchai($name, $color) {
$this->c_name = $name;
$this->c_color = $color;
echo c_name . ';;;;' . c_color;
}
// and so on
....
}
- 后期变更需求: 菜刀的c_name,要修改成cd_name, 那么你就会这么做
class caidao {
protected cd_name;
protected c_color;
function qiecai($name, $color) {
$this->cd_name = $name;
$this->c_color = $color;
echo c_name . ';;;;' . c_color;
}
function kanchai($name, $color) {
$this->c_name = $name;
$this->c_color = $color;
echo c_name . ';;;;' . c_color;
}
// and so on
....
}
这样就解决了,然后你测试qiecai() 这个function 没有问题,OK,上线,然后你就会发现,当执行kanchai()这个function时就会有问题。当然你会说这个是自己马虎,自己测试不够,没有修改到下面这个方法,测试也没有测试到位。但是你想想,如果这个类里代码一多起来,你每次有修改,你是否确定你一定能所有的都检查到?
这只是个简单的例子,当然实际开发中一般都是一些方法之间的相互调用和依赖,然后这个问题就更加会在修改之后爆发。
结论: 所以在设计类的时候,我们就要注意这个单一职责的原则,使得设计的类具有高内聚,这样才能低耦合。
欢迎拍砖。
下期我们继续讨论 原则二: 预留连接位置。
本文深入探讨了面向对象设计中的单一职责原则,强调了解耦和增强内聚性的重要性,并通过实例说明了如何避免因功能混杂导致的问题。

51万+

被折叠的 条评论
为什么被折叠?



