2010-09-16 59 views
1

我读罗伯特·马丁的清洁守则和他提到有关代码是高度凝聚力:高凝聚力和并发性 - 他们利益冲突吗?

类应该有一个少数 实例变量。每个类的 方法应该操作 一个或多个这些变量。在 通常,更多变量方法 操纵方法对其类的更有凝聚力。在 一类每个变量的使用由每个 方法是最大限度cohesivemethod是最大限度地凝聚

但是,当我们试图编写并发代码,我们努力的变量的范围限制在一个单一的方法来避免竞争条件。但是,这会导致代码的凝聚力最小。

在设计应用程序/类时,您应该选择什么 - 内聚或并发?

回答

1

我喜欢Martin的一些概念,但是你的代码需要正确执行,如果不行,所有美丽的指标都不会让你看起来更好。

除此之外,线程问题是最严重的问题之一,您不应该为了并发而损害您的设计,以符合您在书中关于凝聚力的内容的想法。再说一遍,我不是在敲马丁......我敢肯定他会告诉你同样的事情。毕竟,他认识到在他的大部分写作中几乎所有东西都是连续的。

我不确定你是否把重点放在了正确的位置上(可能就是我阅读你的问题的方式)。马丁并没有说你应该尽可能地在班级尽可能多地提供变数。他说的是班级变量,你有多少人使用?如果你推广你不需要的变量,你可能不会获得更高的凝聚力......你可能会获得更紧密的耦合。

+0

谢谢吉姆。但是我的问题是,当你正在考虑让你的应用程序并发时,理想的事情就是减少内聚,这样你就不需要同步你的方法。我只是想知道,如果我花费太多时间让课程具有凝聚力,我将留下难以并行化的代码。 – rkg 2010-09-16 04:56:12

+0

你是维护你的代码的人。最重要的是,做你知道你可以做的事,并让它正常工作。如果我必须选择,并且我知道我的应用程序是多线程的,那么我会选择并发性。但是,我更喜欢避免必须选择的情况。 – 2010-09-16 05:22:39