2010-02-13 81 views
3

我有一個類需要從一個系統的數據庫獲取產品信息並將其保存到另一個系統的產品數據庫。幫助類設計

我會從第一個系統產品A和其他產品B調用一個產品。產品B的數據取決於從用戶中選擇的設置。

因此產品B可能有GetDescriptions方法着眼於使用表示變量說明1,從產品A或者他們可以選擇說明2或者也可以使用說明已在產品B.用戶設置

這是好的,但有很多設置和方法來獲取描述。這是問題所在,我有很多方法似乎都與產品B有關。像GetDescription,GetName,GetSku這樣的方法都是根據用戶設置進行設置的,並且都依賴於產品A.

儘管它們都是似乎與產品B有關,該班正在成長得非常龐大,我希望將班級中的某些方法轉移到另一班。我正在考慮使用工廠模式。像下面的東西(代碼只是一個快速的想法)

public class ProductBuilder 
{ 
    public ProductB BuildProduct() 
    { 
      SkuBuilder.BuildSku(ProductB,ProductA); 
      ProductDescriptionBuilder.BuildDescription(ProductB,ProductA); 
    } 
} 

我的問題是:什麼是一個好的設計?我上面提出的方法是否可以接受?你看到這個設計有任何潛在的問題嗎?

回答

3

這是一個工廠模式的變體,它是一種非常有用的設計形式。什麼你寫建議整齊三級設計:ProductA包含的方法和屬性只屬於A,ProductB與方法和屬性有關B和ProductBuilder它建立您基於一個A.

唯一的A B這是一般的面向對象設計問題。確保ProductConverter不依賴於A或B的內部知識 - 換句話說,確保A和B的公共接口足夠豐富,以便ProductConverter可以完成其工作。只有A應該連接到A的產品數據庫,只有B應該連接到B的產品數據庫。避免單身和全球狀態。這些是你幾乎在任何應用程序中都會做的事情,但它們將成爲這種系統中的特殊陷阱。

1

我會建議使用ProductBuilder中的抽象,直接使用ProductA和ProductB ......這種方式可以稍後改變實現。使用接口或抽象類...

此外,它將更容易進行測試和嘲笑。