对于我的软件开发编程类,我们应该为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