我正在编写一组类:RAR,ZIP和Trip。它们都有共同的兴趣:它们是存档格式。所以,我最初想过这样做:
1)写一个基础抽象类
abstract class Archive {}
并将其放在“libraries / archive / archive.php”。
2)写zip,rar和trip classes
class Archive_Zip extends Archive {}
并将它们放在“libraries / archive / zip.php”
3)像这样访问特定的类(例如Zip)
$this->archive->zip->...
这是我最初的做法。但是,你认为这是一个好方法吗?我应该在第一时间抽象它们吗?只编写“libraries / zip.php”文件(以及所有其他文件)的优缺点是什么?
您对我的方法有任何建议或论据吗?我做的事情有什么不好吗?
答案 0 :(得分:2)
我喜欢Zend Framework方法。
文件:
lib/Archive.php
lib/Archive/Zip.php
lib/Archive/Rar.php
代码:
require_once 'Archive_Zip';
$zip = new Zip();
答案 1 :(得分:1)
由于#3并不真正遵循#1或#2,因此另一种方法就是在需要时实例化对象..像这样:
$archive = new Archive_Zip();
完成。无需使其复杂化。
答案 2 :(得分:1)
抽象类的主要好处是可以在整个代码中使用的通用接口。然后,您可以将实现切换到另一种存档格式,而无需更改一堆代码。我没有经常使用PHP,所以这个答案是基于一般的OOP原则。看起来achives会成为该方法的一个很好的候选者,因为它们共享一组共同的操作。
答案 3 :(得分:1)
这取决于您的实施。您是否会使用策略模式来确定要使用哪种压缩算法?如果压缩算法可以在其他代码位之间互换使用,则抽象它们。
他们应该遵守相同的合同并分享共同的功能吗?大概。这很好地利用了抽象。
此外,如果它只是为了帮助您创建逻辑关联以便于阅读,那就去吧。这是我的看法。
答案 4 :(得分:0)
我个人对抽象类没有多大用处。最好的情况是,它们似乎是对您自己的代码的检查,确保您已在子类中定义了一组方法。
继承本身对你有好处,如果你的子类有许多共同的方法,它将有助于拥有一个基本的Archive类。
答案 5 :(得分:0)
在这个问题中,拥有Archive基类的好处是,它应该真正指导您为客户端代码定义一组公共方法来操作存档文件,而不考虑存档格式。 (另一种做同样事情的方法是定义一个Archive接口,你的所有其他类都会实现。但我怀疑你最终会在所有类中使用一些公共代码;将Archive作为你的基类给你把它放在一个好地方。)