首页 新闻 会员 周边 捐助

单一权责问题

0
悬赏园豆:10 [已解决问题] 解决于 2020-12-29 11:37

最近在阅读代码整洁之道,书中作者说的关于类的单一权责问题。我想问一下什么是一个类的权责,什么样的类的方法算是单一权责,什么样的类的设计违反了单一权责,求一个形象的解释,对于权责的概念不是很明白

monty12的主页 monty12 | 初学一级 | 园豆:189
提问于:2019-11-14 21:27
< >
分享
最佳答案
0

看到单一职责原则就想到了之前看过的一本书,手机拍下了讲这一部分的内容,希望对你有用。



收获园豆:10
知音12138 | 初学一级 |园豆:176 | 2019-11-14 22:22

大话设计模式 这本书我看过...

彭小立 | 园豆:634 (小虾三级) | 2019-11-15 08:30

看到大鸟就很熟悉

猝不及防 | 园豆:2878 (老鸟四级) | 2019-11-20 11:05
其他回答(4)
0

我讲的通俗点就是一个方法你别干两件事情,雷还有高内聚,低耦合,讲通俗点就是方法封装,代码精简,然后方法差不多都是对某个事物操作丢同一文件夹中,这是高内聚,低耦合就是你做一件事别弄出多种方法

小小咸鱼YwY | 园豆:3312 (老鸟四级) | 2019-11-14 23:19
0

比如一个类就只干一种事情,不要搞太多功能。汽车类,就只给汽车的功能,你前进,后退,左转,右转。
鼠标类,就只给左点击,右点击。不要把这个功能以外的功能融到一起。

gw2010 | 园豆:1487 (小虾三级) | 2019-11-15 10:07

类和模块应有且只有一条加以修改的理由是什么意思?能给解释一下吗?

支持(0) 反对(0) monty12 | 园豆:189 (初学一级) | 2019-11-15 10:10

@monty12: 我看上面的图,感觉意思就是改是因为一个原因?你要改类是因为什么?肯定就是这个类或或者模块的这种功能不满足了,才改,也就是只能因为这一种原因,如果你又是因为这样去改,又是因为另一样去改就是多于两种以上的责职了。
其实这个也是要看你类抽象的程度的,但是是因为这个模块本生功能不满足了才去改它这个不会变,但是这种有点像废话,但是很多经典的东西就是废话,比如墨菲定律也是一句废话。
这个就看你自己怎么理解了,刚才说的汽车类,你要改只能因为是调整汽车类,不能因为调整方向盘的功能而去改汽车类,刚才说的鼠标类,你要修改一定是因为要改鼠标,而不是因为要去改鼠标滚轮(其他的东西,不是因为要改水杯,这样更为合理,因为两个例子我都说了相关的东西,像滚轮,你方向盘,虽说这种说法也对,但是用其他的东西更能说明一点)。这样来看总结一下就是改类一定是因业要改这个类的东西,而不是其他东西。好废话的说活。

支持(0) 反对(0) gw2010 | 园豆:1487 (小虾三级) | 2019-11-15 10:26
0

这是个很虚的概念,主要取决于你对职责划分的粒度,粒度太小和太大都不好,中庸之道就好了。至于怎么划分粒度才是合理的,那就需要你的智慧和经验了。

会长 | 园豆:12463 (专家六级) | 2019-11-15 10:41

我感觉在clean code中讲的比较模糊,我在网上也没有找到合适的例子

支持(0) 反对(0) monty12 | 园豆:189 (初学一级) | 2019-11-15 10:42

@monty12: 这个真的每人能讲的一清二楚。有的职责就是分离好,而有的分离没什么用。有句话说的好,一个类应该只有一个能够引起其变化的原因,没说是一个类只能有一个职责,这句话虽然说的好,但是没有什么指导意义,如何判断引起变化的原因个数,还得靠开发者的智慧和经验(也可以说是直觉,多年的工作形成的潜意识)。

支持(0) 反对(0) 会长 | 园豆:12463 (专家六级) | 2019-11-15 10:54

@会长: 我想问一下一个类应该只有一个能够引起其变化的原因是什么意思?我不是很理解

支持(0) 反对(0) monty12 | 园豆:189 (初学一级) | 2019-11-15 11:02

@monty12: 只可意会,不可言传。这就上升到编程的艺术高度了。

支持(0) 反对(0) 会长 | 园豆:12463 (专家六级) | 2019-11-15 11:04

@会长: 哎,身为一个菜鸡无法理解

支持(0) 反对(0) monty12 | 园豆:189 (初学一级) | 2019-11-15 11:06

@monty12: 工作几年就有些直觉了。

支持(0) 反对(0) 会长 | 园豆:12463 (专家六级) | 2019-11-15 11:08

@会长: 嗯,谢谢。

支持(0) 反对(0) monty12 | 园豆:189 (初学一级) | 2019-11-15 11:09
0

不要太纠结在类上,包括方法也是一样,变量也是一样。比如说这个方法你是做加法就做加法,结束就return回去。不要在这个方法里写对if else,根据判断结果做加、减、乘、除。还有这个变量,拿来存人名就存名称,不要不用了又拿来存地址。说白了,起名很重要,超越了你这个名字的事情就不该你来做。

拓拓龙 | 园豆:210 (菜鸟二级) | 2019-11-15 15:57

好的,谢谢

支持(0) 反对(0) monty12 | 园豆:189 (初学一级) | 2019-11-15 19:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册