對於我的軟件開發編程類,我們應該爲RSS提要製作一個「Feed Manager」類型的程序。以下是我如何處理FeedItems的實現。封裝變得荒謬嗎?
尼斯和簡單:
struct FeedItem {
string title;
string description;
string url;
}
我被下調爲, 「正確」 的答案例子如下:
class FeedItem
{
public:
FeedItem(string title, string description, string url);
inline string getTitle() const { return this->title; }
inline string getDescription() const { return this->description; }
inline string getURL() const { return this->url; }
inline void setTitle(string title) { this->title = title; }
inline void setDescription(string description){ this->description = description; }
inline void setURL(string url) { this->url = url; }
private:
string title;
string description;
string url;
};
現在對我來說,這似乎是愚蠢的。我真的不敢相信我被打倒了,當時我的確有同樣的事情發生,而且我的開銷很大。
這讓我想起了如何在C#中的人總是這樣做:
public class Example
{
private int _myint;
public int MyInt
{
get
{
return this._myint;
}
set
{
this._myint = value;
}
}
}
我的意思是我GET他們爲什麼這樣做,也許以後他們要驗證在二傳手的數據或在吸氣劑中增加它。但是,爲什麼你們不這樣做呢?UNTIL那種情況出現了嗎?
public class Example
{
public int MyInt;
}
對不起,這是一種咆哮,並不是一個真正的問題,但冗餘令我很生氣。爲什麼當不需要的時候,吸氣人員和安裝人員如此熱愛?
如果你認爲這是荒謬的,你還沒有使用的庫與具有返回單個Manager實例與返回與包含SQL字符串屬性返回類映射類的單一方法的一種方法的單身工廠類聲明。哦,每個中間階層都有一個界面。 – 2009-11-11 02:31:54
如果你這樣做,直到它需要改變它已經太晚了。你有一個成員標題(這是一個字符串)。但有時候我們需要將實現改爲char數組。然後不幸的是,你的實現被卡住了(每個人都已經在使用title(和它的公共API的一部分),你不能改變它們,所以你不能改變你的實現。您實現私有部分不外露,因而是可以改變的。 – 2009-11-11 04:04:29
個人而言,我恨geters/setter方法(它的Java一樣,而不是C++等)。你爲什麼要與對象的內部擺弄,它看起來並不像它是有道理的一旦創建就更改這些成員(但這取決於用法要求)我會讓所有成員都是私有的,構造函數來創建它們並查看對象的使用方式。添加unnesacery getters/setters幾乎與具有公共變量。 – 2009-11-11 04:12:42