2010-12-07 48 views
3

從面向對象設計的角度來講,你認爲提供一種將自身保存到數據庫中的功能會損壞類的COHESION嗎?對象是否能夠將自身保存到DataBase中會損害類的內聚性?

試想:

Product p = new Product() 
      { 
      Name = "Joy Rider", 
      Price = 100, 
      Currency = "USD" 
      }; 

你想保存這個產品p到數據庫更好地以這種方式來完成:

p.Save(); 

或方式是這樣的一個:

ProductServices.SaveProduct(p); 

您怎麼看?

回答

5

它確實干擾單一責任原則。在您的示例中,Product類的用途是表示產品以及該產品的操作。與數據庫交互不是班級責任的核心部分。

擁有ProductServices類可以提高代碼的可維護性。假設在數據庫中保存對象的邏輯是要更改(它可以)是否要更改系統中的每個實體類?

8

可以將自身保存到數據庫的對象違反了SRP(單責任原則)。

持久性本身就是一種責任,應該由專門的類來處理。

這將是除了低凝聚力之外 - 與持久性有關的成員與那些沒有和不會用於那些不涉及持久性的類的方法沒有關係。

-1

在只有面向對象設計方面沒有沒有什麼不對的保存方法是產品的一部分。它實際上是面向對象設計領域中的首選方法。從純粹的面向對象的角度來看,你不希望它被分解,因爲它比對象更有用。但是,如果您認爲依賴倒置原則說高層模塊不應該依賴低層模塊,那麼Save方法將是合適的,但它應該將抽象Connection類型作爲參數。這會給你一個很好的對象模型,其中包含一個Save方法,但它不知道連接的類型。

+0

burak - 你想知道產品中是否應該有Save方法嗎?或者你想知道它是否應該轉移到另一個類ProductServices? – phillip 2010-12-07 15:55:16

相關問題