**结束。**此问题不符合堆栈溢出准则。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
5个月前关门了。
改进这个问题
我不擅长命名,我擅长感觉。
假设我们有一个假设函数:
function computePowerAndPrintResult(int x){
print(x*x);
}
它已经在函数的命名(“and”)中尖叫,这里出了问题,我个人从来没有写过这样的代码。这里违反了哪条原则?是单一责任原则吗?
**结束。**此问题不符合堆栈溢出准则。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
5个月前关门了。
改进这个问题
我不擅长命名,我擅长感觉。
假设我们有一个假设函数:
function computePowerAndPrintResult(int x){
print(x*x);
}
它已经在函数的命名(“and”)中尖叫,这里出了问题,我个人从来没有写过这样的代码。这里违反了哪条原则?是单一责任原则吗?
3条答案
按热度按时间wfypjpf41#
不,不是。单一责任是指一个类。当一个类做的太多时,它就被违反了。当一个函数做得太多时,尽管你需要分解它。
我并不是说这不是一个迹象。
在我看来,你需要一个类来计算功率,一个类来管理打印。
但是:假设我需要实现一个我将调用的api,它将返回计算能力的pdf。我需要一个api,既可以计算和打印结果。
然后我会创建
GetSquareValueOutput
它将负责协调从SquareValueCalculator
类,然后使用Printer
班级。这是最后一次
GetSquareValueOutput
不如打电话来computePowerAndPrintResult
它不会破坏任何东西。我不会选择这个名字,因为它暗示着代码的味道,但最终它只是上下文的问题。k7fdbhmy2#
热释光;医生:把名字改成
printSquare
. 那么这个名字要短得多,同样准确地描述了你所做的事情,但是。。。如果你真的想担心单一责任原则,你还是在破坏它。这更说明了srp是如何容易被过度使用的,而不是一种糟糕的方法。深入了解那个名字
“computepower”是个坏名字,原因有两个:
“幂”是一个二进制运算(x是yth的幂),你并不是真的这么做;您已将y锁定到“2”,并且该操作也有一个通用名称:“square”。
“compute”通常是多余的。正方形已经暗示计算正在进行。看看java的atomicinteger或biginteger,它们的方法名为
add
(实际上,对于bi,应该是plus
)但关键是,它不是computePlus
. 注意,这取决于几个因素;例如,在java中,用get
,在具有不相关属性或其他属性的类中square
并不像人们想的那么清楚(比如说,它的几何关系,所以square
可能会被误解为是指形状而不是数学运算),那么这也是过于简单化的问题。这意味着方法名的一部分应该是
square
而不是computePower
.然后我们有了
andPrintResult
部分。在这里Result
这是多余的。除了结果,它还能打印什么?您有两种选择:
此方法应命名为
square
并且应该返回该值而不打印任何内容。用另一种方法打印东西。“作为一个代码的味道是。。嗯。也许 吧。听着,你可以命名这个方法
printSquare
它是短的,清晰的,不包含and
然而,这是违反规则的computePowerAndPrintResults
.在很多方面
printSquare
直接违反了srp,但是如果你把名字改成reportSquare
,代码将计算平方,然后将其报告给已配置的(通过依赖项注入注入,例如)“reporter output stream”,突然之间这并不是违反srp,但我们所做的只是重新定义了一些单词,代码保持不变。bvjxkvbb3#
对。这个名字确实是一个赠品。违反了单一责任原则,函数负责两件事:计算平方和打印结果。
同时,良好的命名意识也遭到了侵犯:至少它应该被命名
computeSquareAndPrintResult
因为Power
不指定指数没有多大意义。我个人会称之为printSquareOf
所以你可以这样称呼它printSquareOf(x)
,读起来很自然。