2010-02-19 36 views
5

我想了解什麼是實際的責任,所以我想用一個我目前正在工作的例子。我有一個將產品信息從一個系統導入另一個系統的應用程序。應用程序的用戶可以選擇各種設置,以便在一個系統中的哪個產品字段中使用另一個系統中的產品字段。幫助理解單一責任原則

所以我有一個班,說ProductImporter,它的責任是導入產品。這個班很大,可能太大了。

該類中的方法很複雜,例如getDescription。這種方法不是簡單地從其他系統獲取描述,而是根據用戶設置的各種設置設置產品描述。如果我要添加一個設置和一個新的描述方式,這個類可能會改變。

那麼,這是兩個責任嗎?有沒有一種產品可以進口,有一種可以獲得產品說明。這似乎是這樣的,幾乎所有的方法都會在它自己的類中,而且看起來像是過度殺傷。

我真的需要很好的描述這個原理,因爲我很難完全理解。我不想要不必要的複雜性。

回答

3

「責任」在這個原則中被定義爲一個改變的理由。在這種情況下,你們班的單一職責就是進口產品。如果導入產品的方式發生變化,那麼該類應該改變。

其目的是爲了避免在同一時間改變同一類的不同事物。例如,如果您的產品進口商類還定義了其輸出格式,那麼它將承擔兩項責任,輸出格式可能與導入數據的機制完全無關。

現在,該類是巨大的,並且getDescription()也設置了描述不是直接違反SRP,而是不同的原則。也就是說,你應該避免擁有龐大的班級(顯示缺乏設計),每種方法都應該做一件事(這將是一種更具體的SRP版本)。

+0

它「顯示缺乏設計」 - 這是我不知道如何糾正的問題。如果描述方法屬於課程內容,而且我必須根據各種設置對各種變體進行說明,那麼您還可以如何設計它。我沒有看到任何其他的方式。 – user204588 2010-02-19 15:26:17

+0

你可以有一個描述類,其職責是處理變化。等等,當一個責任過大時,將其分解爲更小的責任。 – 2010-02-19 15:38:50