2010-08-12 62 views
1

我正在導入產品,因此我有一個產品導入類。它有大約4000行,所以我想分解它。我已經開始分解它,但是我很難決定什麼是班級,什麼不應該。我認爲我所有的方法都使用了三個相同的實例變量,所以如果我將這些方法分開,我會將這些實例變量傳遞給構造函數中的每個單獨的類。我開始打破這種局面的一種方式是通過查看處理相同類型產品數據的一組方法。例如,一些方法與產品描述一起工作,一些方法與產品類別一起工作,所以我開始將它們分成單獨的類,但是接着有人告訴我,如果這些不同的類都使用相同的三個實例變量,它們可能應該合併成一個類。那麼,我該怎麼做?我真的不瞭解正確的課程設計,只是把它們分開,因爲很難在大班上找到代碼。重構大類

如果這裏的問題丟失了,有什麼提示可以重新分析一個大類。是我在上面提出的一個好的解決方案,我應該重新分解一個類,其中所有的方法使用相同的三個實例變量。

這個應用程序是一個asp.net應用程序,它從一個系統A的數據庫獲取產品數據,並根據用戶可以選擇的大量設置和配置將產品數據保存到系統B的數據庫。例如....

public class ProductImporter 
{ 
    ProductA productA; 
    ProductB productB; 
    ImportSettings settings; 

    public void GetProductADescription() 
    { 
     //look at the settings and add productB description to productA 
     productA.Desc = productB.Desc; 
     //.... 
    } 

    //.... tons of methods that all deal with product moving one product to the other 

    public void AddProduct() 
    { 
      //go through all the settings 
      productA.Save(); 
     } 

} 
+0

我沒有看到問題點;你可以做一些opp設計並重寫你的代碼,或者用分裂代碼做opp設計。 – Svisstack 2010-08-12 22:37:19

+0

也許這三個實例變量應該是它們自己的類(類似於current_state),它被其他類傳遞和操縱?很難說,當你沒有描述他們的目的時,但這種可能性聽起來並不是太牽強。 – 2010-08-12 22:38:17

回答

0

可以

  • 做新的OPP設計,從舊類代碼重寫新的。
  • 做OPP設計時,對象拆分。

如果

  • 你有一個功能從堆棧只得到論證和不使用類成員;你可以簡單地將這個函數從舊類複製到新的類,並在新的環境中重構它。
0

重構類的目標是一個很好的目標。小班通常比大班更好。然而,糟糕的重構可能會讓你處在比你開始的地方更糟糕的地方。

我建議你花些時間閱讀好的Java設計模式。你可以從Head First Design Patterns(http://www.amazon.com/First-Design-Patterns-Elisabeth-Freeman/dp/0596007124)等中學到很多...

+0

由於他沒有指定語言,因此「Java設計模式」可能不適用。儘管模式在某種程度上與語言無關,但一種語言中常見的模式可能很少或甚至完全不適用於另一種語言。 – 2010-08-12 22:52:57

3

也許你應該將這三個實例變量封裝到另一個類中。代碼只有處理這些變量才能進入新班;代碼也使用其他變量可以留在現有的類中。然後,您將使用新類型的一個變量替換三個現有實例變量。

這是假設三個變量確實合理地封裝在一起。你的描述建議就是這種情況(因爲他們經常一起使用),但很難說沒有更多的信息。在不知道這個類應該做什麼的細節,三個實例變量代表什麼,或者現有類中有什麼其他狀態,我們真的只是在猜測。

需要考慮的一件事:這三個變量是否會在您現有的類中被邏輯地組合在一起而不是

+0

我已經添加了關於該應用程序的更多信息 – user204588 2010-08-12 22:52:19