【发布时间】:2010-12-17 18:12:17
【问题描述】:
假设你有一个 ZipFile 类和一个 Content 类。
ZipFile 有一个 load() 方法,用于读取 zip 存档中所有文件的内容并将其放入 Content 对象中。
什么是最合适的 OOP 设计?
1) ZipFile.load() 将创建一个 Content 对象
class ZipFile
{
public function load()
{
// Load all files in zip
// ...
Content content = new Content();
content->set(data);
return( content );
}
}
ZipFile zf = new ZipFile();
Content ct = zf->load();
ct->print();
B) 给 ZipFile 构造函数一个 Content 对象来填充
class ZipFile
{
private Content content;
public function ZipFile(content) // constructor
{
this->content = content;
}
public function load()
{
// Load all files in zip
// ...
this->content->set(data);
}
}
Content ct = new Content();
ZipFile zf = new ZipFile(ct);
zf->load();
ct->print();
基本上,分离对象(松散耦合)更好吗? 作为一个老派的程序程序员,我不能停止质疑设计 OOP 的几种方法。我浪费了很多时间在“OOP 这个的最佳方法是什么。有什么建议可以考虑一下吗?书?网站?
感谢您的帮助
【问题讨论】:
-
为什么不把
Content对象给load函数而不是构造函数呢?这将更等同于第一个示例。 -
Content 可能被视为 ZipFile 的一部分,因为每个 ZipFile 都有一个 Content,所以我将它交给构造函数。但我的问题更多是关于每种解决方案的优缺点。