我不确定我是否同意这个观点,所以我希望能找到这本书背后的书或期刊文章,以便我可以检查我是否明白他们在说什么,以及他们的意思。对象应该只做一件事的想法在哪里?
我想我理解这个想法 - 我只是想知道源代码,所以我可以检查这个想法来自哪里。
为什么我问:
术语“做一件事”是含糊不清,可能意味着很多事情,包括“只有每一个类的方法”(可笑)...我认为这可能意味着单一责任(即多种方法)。它也不是特别有用,因为您必须判断何时单个责任变得足够复杂,需要用某种委托来重构几个责任...
我不确定我是否同意这个观点,所以我希望能找到这本书背后的书或期刊文章,以便我可以检查我是否明白他们在说什么,以及他们的意思。对象应该只做一件事的想法在哪里?
我想我理解这个想法 - 我只是想知道源代码,所以我可以检查这个想法来自哪里。
为什么我问:
术语“做一件事”是含糊不清,可能意味着很多事情,包括“只有每一个类的方法”(可笑)...我认为这可能意味着单一责任(即多种方法)。它也不是特别有用,因为您必须判断何时单个责任变得足够复杂,需要用某种委托来重构几个责任...
来自Bob Martin的SOLID原则。准确地说,是
Single Responsibility Principle。
虽然,在对单一职责原则这一章的第一页,他说:
这一原则在汤姆·德马科和迈利尔·佩奇·琼斯的工作描述。他们 称它为内聚力。
对于他提到工作的参考文献:
其他来源包括:
单一责任原则 - 检查here有关该主题的一些信息。
什么是来源,我不认为这是OO中的常见想法。 一个对象可能会做很多事情。
我认为它来自哪里并不重要。我不想要中文Whisper版本 - 我想知道被重复研究的原始意图,所以我可以像人们在真正的学科中一样做出明智的判断;-) – daf 2009-11-09 21:14:17
在软件中发明模块化思想的人是David Parnas博士。经典论文是On the Criteria To Be Used in Decomposing Systems into Modules
虽然他一般都没有谈论OO(因为它还没有出现),但OO的想法从Parnas博士的工作中自然延伸出来。这项工作的一部分是分析如何将软件分解为模块,并且这些模块应该是单一用途的。
好的答案 - 但不是我问的具体问题。 ;-) – daf 2009-11-10 00:11:50
那么,我相信Parnas自己说OO只是他模块概念的一个现代版本。所以那个导致另一个:) – 2009-11-10 14:38:05
单一责任原则(SRP)在Java世界中相当普遍。这里提到的参考文献很好。
该原理可以适用于类和方法,因为它对两者都是一个好主意。
知道SRP并在可能的情况下应用它的结果通常是更简单的代码,但代价是更多的类/方法。这对于重用,测试和下一个程序员来说是非常有价值的。
Martin的名单是从以前发表的文章收集而来。 – 2009-11-09 20:57:43
另请参阅http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design)。 – 2009-11-09 20:58:55
并参阅http://c2.com/cgi/wiki?AllocationOfResponsibility – 2009-11-09 20:59:29