2010-09-16 75 views
1

我讀羅伯特·馬丁的清潔守則和他提到有關代碼是高度凝聚力:高凝聚力和併發性 - 他們利益衝突嗎?

類應該有一個少數 實例變量。每個類的 方法應該操作 一個或多個這些變量。在 通常,更多變量方法 操縱方法對其類的更有凝聚力。在 一類每個變量的使用由每個 方法是最大限度cohesivemethod是最大限度地凝聚

但是,當我們試圖編寫併發代碼,我們努力的變量的範圍限制在一個單一的方法來避免競爭條件。但是,這會導致代碼的凝聚力最小。

在設計應用程序/類時,您應該選擇什麼 - 內聚或併發?

回答

1

我喜歡Martin的一些概念,但是你的代碼需要正確執行,如果不行,所有美麗的指標都不會讓你看起來更好。

除此之外,線程問題是最嚴重的問題之一,您不應該爲了併發而損害您的設計,以符合您在書中關於凝聚力的內容的想法。再說一遍,我不是在敲馬丁......我敢肯定他會告訴你同樣的事情。畢竟,他認識到在他的大部分寫作中幾乎所有東西都是連續的。

我不確定你是否把重點放在了正確的位置上(可能就是我閱讀你的問題的方式)。馬丁並沒有說你應該儘可能地在班級儘可能多地提供變數。他說的是班級變量,你有多少人使用?如果你推廣你不需要的變量,你可能不會獲得更高的凝聚力......你可能會獲得更緊密的耦合。

+0

謝謝吉姆。但是我的問題是,當你正在考慮讓你的應用程序併發時,理想的事情就是減少內聚,這樣你就不需要同步你的方法。我只是想知道,如果我花費太多時間讓課程具有凝聚力,我將留下難以並行化的代碼。 – rkg 2010-09-16 04:56:12

+0

你是維護你的代碼的人。最重要的是,做你知道你可以做的事,並讓它正常工作。如果我必須選擇,並且我知道我的應用程序是多線程的,那麼我會選擇併發性。但是,我更喜歡避免必須選擇的情況。 – 2010-09-16 05:22:39