2010-12-17 30 views
0

我正在學習OOP,我發現有一種編程習慣不好,創建一個包裝類以獲得一方的信息,而另一方的類包含處理第一類的方法,但我不理解這個概念,如果可能的話,請求一些解釋和例子。這種「糟糕的編程習慣」的解釋?

在此先感謝

+6

歡迎來到SO。你應該展示一些具體的例子,沒有任何上下文就不可能回答這個問題。 – 2010-12-17 18:10:39

+1

吸菸通常是一個糟糕的程序員的習慣,但是我知道什麼,我在PHP ...... – Anycorn 2010-12-17 18:13:23

+1

也許這裏的建議是,這些應該是一個類 - 作用於該信息的類也應該存儲它。如果您沒有提供示例,或許您至少可以鏈接到您發現此建議的地方? – 2010-12-17 18:20:24

回答

1

什麼你所描述的是一種「愚蠢的模式」,這是一個非常小的問題。密切注意那些觸及信息類的每個領域的代碼,或者開始深入其數據結構以更改或閱讀它們 - 尤其是當您發現自己在應用程序的多個部分中執行類似的操作時。當你抓住其中的任何一個時,嘗試將這些工作轉移到信息類的方法上。

跟蹤第二類問題的一個好方法就是一個點規則 - 如果你發現自己在另一個類中調用一個類的方法,那麼第一個類應該可能在方法中處理該操作。

+0

我喜歡這個名字「啞巴模型」,以前沒有聽說過 – 2010-12-17 18:31:32

2

我認爲你似乎正在考慮在信息類中更好的方法 - 兩者應該合併,並且作用於信息的類也應該存儲它。

class CoordinatePair 
{ 
     float x, y; 

     public Coordinate(float xIn, float yIn) {x = xIn; y = yIn;} 

     public getX() {return x;} 
     public getY() {return y;} 
} 

class CoordinateTools 
{ 
     public CoordinatePair add(Coordinate a, Coordinate b) 
     { 
     return new CoordinatePair(a.getX() + b.getX(), a.getY() + b.getY()); 
     } 

     public float dotProduct(Coordinate a, Coordinate b) 
     { 
     returna a.getX() * b.getX() + a.getY() * b.getY()); 
     } 
} 

可以用能夠更好地完成:(或可選擇地超負荷運營商,至少是一個靜態的工具類)

class CoordinatePair 
{ 
     float x, y; 

     public Coordinate(float xIn, float yIn) {x = xIn; y = yIn;} 

     public getX() {return x;} 
     public getY() {return y;} 

     public CoordinatePair sumWith(CoordinatePair other) {//body} 

     public float dotProductWith(CoordinatePair otheR) {//body} 

} 

這個例子是一種微不足道的,但你希望能看到它越來越差與更多涉及的東西。

1

我會說:這取決於。

在某些情況下,將數據與行爲分開將是最佳解決方案,例如在data transfer objectsdomain entities中。設計算法時,這種分離也很有用 - 請看visitor patternSTL algoritms的設計。

一般來說,Single responsibility principle在這裏很重要。如果你的對象試圖做很多不同的,邏輯上獨立的操作,那麼將這些操作與數據分開可能是一個很好的解決方案。

相關問題