怎样看待 Martin Fowler 最新学说 FunctionLength 函数越短越好

SOA, Microservice, Serverless 解决的问题完全不同,并不是层层递进的关系,因此问题本身就不是很合适。先说几句题外话,Microservice可以看做是SOA的一种实现,而并不是替代SOA(因为SOA只是一个架构风格),一般争论点事Microservice和重量级的Web Service间的,而不是Microservice和SOA的。然后Serverless更多强调的是部署形态,跟Microservice也并不是直接冲突关系,两者完全可以混合使用,这个如果你使用过AWS的Lambda之类就会有认识。至于短小的函数体,这个老马从《重构》那本书就开始一直在说了,并不是什么新概念,而且也被认为是一个很合理的工程实践,至少我们平时写代码也会比较在意这一点。之前有个提法,说方法一般不超过5行(也有说3行的)。一切总以简介,表意为出发点。至于短函数可能导致的性能考虑文中也提到了,很多时候这个问题已经不是一个问题了,毕竟企业应用和嵌入式开发对性能的考虑是完全不用的,更何况编译器已经非常智能了,在形成二进制的时候就已经帮程序员搞定性能的事情了。
■网友
这叫代码即注释,提高可读性length==0和isEmpty哪个可读性好?
■网友
需不需要函数在于函数是否有很直接的含义,并且进行了合理的抽象,.我们关心的是数组是不是空,所以isEmpty很表意,而list.lengh=0只是具体实现.搞个函数出来实现了接口与实现的隔离
■网友
“函数越短越好”不是本质,本质是“单一职责”、“同一层次”,而这两个本质的背后就是可读性。
如果函数实现的行数很长,但仍然是在干一件事、而且这一件事的具体步骤仍然在同一个层次上,就没有必要减少代码行数,而且减少了会让代码变得不可读。这种情况的例子一时不好列举出来,但我见过不少。
另外,即便是一行代码,如果不符合本质,也需要修改:
if (str-\u0026gt;IsEmpty() \u0026amp;\u0026amp; (falg \u0026amp; 0x1)) {
...
}
应该改为:
【怎样看待 Martin Fowler 最新学说 FunctionLength 函数越短越好】 int strIsUtf8 = falg \u0026amp; 0x1;
if (str-\u0026gt;IsEmpty() \u0026amp;\u0026amp; strIsUtf8) {
...
}
因为虽然它们的职责是单一的,但str-\u0026gt;isEmpty()和(falg \u0026amp; 0x1)不在“同一层次”。


    推荐阅读