2009-06-09 43 views
1

我正在写一组课程:RAR,ZIP和Trip。他们都有共同的利益:他们是档案格式。所以,我最初以为这样做的:关于组织课程和命名的问题

1)写一个抽象基类

abstract class Archive {} 

,并将其放置在 “库/归档/ archive.php”。

2)写ZIP,RAR和跳闸类

class Archive_Zip extends Archive {} 

,并将其置于 “库/归档/ zip.php”

3)访问特定的类(例如拉链)这样

$this->archive->zip->... 

这是我最初的做法。但是,你认为这是一个好方法吗?我应该甚至抽象他们在第一个地方?只是写一个“libraries/zip.php”文件(以及所有其他文件)有什么优点和缺点?

您对我的方法有任何建议或意见吗?我做了什么坏事?

回答

1

由于#3并没有真正从1号或2另一种方法遵循的是只是当你需要它实例化对象..这样的:

$archive = new Archive_Zip(); 

完成。没有必要使其复杂化。

1

抽象类的主要好处是可以在整个代码中使用的通用接口。然后,您将能够将实现切换到另一个存档格式,而无需更改一堆代码。我没有使用PHP很多,所以这个答案是基于一般的面向对象的原则。由于它们共享一组共同的操作,看起来存档将成为该方法的良好候选者。

0

我个人对抽象类没有太多用处。充其量,他们似乎是检查自己的代码,确保你已经在你的子类中定义了一组方法。

继承本身会对你有好处,如果你的子类有许多共同的方法,它将有助于建立一个基础的Archive类。

1

这取决于您的实施。你会使用策略模式来确定使用哪种压缩算法?如果压缩算法可以在其他代码段之间互换使用,请将其抽象化。

他们是否应该遵守相同的合同并分享共同的功能?大概。这是抽象的一个很好的用法。

此外,如果它只是帮助您为了可读性创建逻辑关联,那就去做吧。这是我的承担。

0

大约有存档的基类,在这个问题上的伟大的事情,是不是真的应该引导你为客户端代码定义一组公共方法来处理归档文件,而不考虑归档格式。 (另一种做同样事情的方法是定义一个Archive界面,其他所有的类都可以实现,但是我猜你最终会在所有类中都有一些共同的代码;将Archive作为你的基类会给你这是一个很好的地方。)