我正在學習OOP,我發現有一種編程習慣不好,創建一個包裝類以獲得一方的信息,而另一方的類包含處理第一類的方法,但我不理解這個概念,如果可能的話,請求一些解釋和例子。這種「糟糕的編程習慣」的解釋?
在此先感謝
我正在學習OOP,我發現有一種編程習慣不好,創建一個包裝類以獲得一方的信息,而另一方的類包含處理第一類的方法,但我不理解這個概念,如果可能的話,請求一些解釋和例子。這種「糟糕的編程習慣」的解釋?
在此先感謝
什麼你所描述的是一種「愚蠢的模式」,這是一個非常小的問題。密切注意那些觸及信息類的每個領域的代碼,或者開始深入其數據結構以更改或閱讀它們 - 尤其是當您發現自己在應用程序的多個部分中執行類似的操作時。當你抓住其中的任何一個時,嘗試將這些工作轉移到信息類的方法上。
跟蹤第二類問題的一個好方法就是一個點規則 - 如果你發現自己在另一個類中調用一個類的方法,那麼第一個類應該可能在方法中處理該操作。
我喜歡這個名字「啞巴模型」,以前沒有聽說過 – 2010-12-17 18:31:32
我認爲你似乎正在考慮在信息類中更好的方法 - 兩者應該合併,並且作用於信息的類也應該存儲它。
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}
}
這個例子是一種微不足道的,但你希望能看到它越來越差與更多涉及的東西。
我會說:這取決於。
在某些情況下,將數據與行爲分開將是最佳解決方案,例如在data transfer objects或domain entities中。設計算法時,這種分離也很有用 - 請看visitor pattern或STL algoritms的設計。
一般來說,Single responsibility principle在這裏很重要。如果你的對象試圖做很多不同的,邏輯上獨立的操作,那麼將這些操作與數據分開可能是一個很好的解決方案。
歡迎來到SO。你應該展示一些具體的例子,沒有任何上下文就不可能回答這個問題。 – 2010-12-17 18:10:39
吸菸通常是一個糟糕的程序員的習慣,但是我知道什麼,我在PHP ...... – Anycorn 2010-12-17 18:13:23
也許這裏的建議是,這些應該是一個類 - 作用於該信息的類也應該存儲它。如果您沒有提供示例,或許您至少可以鏈接到您發現此建議的地方? – 2010-12-17 18:20:24