2013-12-09 17 views
0
的冗餘

根據SOLID,您是否應該通過功能或類別消除冗餘?根據SOLID

例如,如果我們有3個班,每個包含String filepath = "..."作爲成員變量,這將是最好創建一個新的類,即Settings.javafilepath爲成員變量或者它會更好地保持filepath 3次,在每種它屬於哪些類,以便每個類都完全負責其屬性?

回答

1

我也會爭辯說,你提供的信息太少,無法理解什麼是最好的。

我不記得固體原則說什麼冗餘本身,但有乾的原則。

我發現冗餘的是,如果你在多個地方做一件事情,如果你需要改變一些東西,你必須記住要更新所有的地方。如果你忘記了一個地方,那麼你的系統就會有不一致的地方,至少有兩種方法來做(概念上)同樣的事情。

這通常會導致一些並不總是很容易找到的錯誤。

當然,這很容易解決,只是沒有冗餘;在做一些事情之前,看看功能是否已經在你的系統中,如果不尋找相關的東西並試圖推廣它。

0

「這將是最好創建一個新的類,即Settings.java與 文件路徑爲成員變量」

不,我不認爲會更好。沒有更多的細節,這很難,但我可能會創建一個接口,稱爲像ISettings,並使用DI注入到必要的類。

我認爲這會更符合SOLID。

1

不要重複自己是單一責任原則的「另一面」。 SRP指出,一個班級應該只有一個改變的理由。 DRY指出,事實上應該有單一的事實根源,所以如果你改變一個事實,那麼依賴於這個事實的每一件事都會受到你的一個改變的影響。

在你的情況下,它取決於你的每個類的使用filepath。如果這些文件必須具有共同的路徑才能滿足特定的業務需求,則它們都應該引用單個定義,並將其保留在包含該要求的某個位置。否則,他們可能應該有獨立的聲明,否則你會發現他們不會很可重用。

+0

我明白爲什麼'filepath'應該被視爲一個'interface'。不過,這是一個好主意,其中'filepath'可能對每個類都是唯一的,或者對每個類都是獨一無二的,因此如果需要的話,您可以知道在哪裏更改它。也許有一個非單實例/非靜態的可重用/動態類'Settings.java',其中'filepath'作爲變量也是有用的,因爲那麼很容易找到需要爲將來的開發做出所有變化的地方? – ThreaT