1

我正在编写一组类:RAR、ZIP 和 Trip。它们都有一个共同的兴趣:它们是存档格式。所以,我最初考虑这样做:

1)编写一个基础抽象类

abstract class Archive {}

并将其放在“libraries/archive/archive.php”中。

2)编写zip、rar和trip类

class Archive_Zip extends Archive {}

并将它们放在“libraries/archive/zip.php”

3)像这样访问特定的类(例如Zip)

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

这是我最初的方法。但是,您认为这是一个好方法吗?我是否应该首先抽象它们?仅编写“libraries/zip.php”文件(以及所有其他文件)的优缺点是什么?

你对我的方法有什么建议或论据吗?我做了什么坏事吗?

4

6 回答 6

2

我喜欢 Zend 框架方法。

文件:

lib/Archive.php
lib/Archive/Zip.php
lib/Archive/Rar.php

代码:

require_once 'Archive_Zip';
$zip = new Zip();

看到这个: http: //framework.zend.com/manual/en/coding-standard.naming-conventions.html#coding-standard.naming-conventions.classes

于 2009-06-09T16:16:57.310 回答
1

由于#3并没有真正遵循#1或#2,因此另一种方法是在需要时实例化对象..像这样:

$archive = new Archive_Zip();

完毕。无需过度复杂化。

于 2009-06-09T15:38:01.447 回答
1

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

于 2009-06-09T15:38:14.940 回答
1

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

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

此外,如果它只是为了便于阅读而帮助您创建逻辑关联,那就去吧。这是我的看法。

于 2009-06-09T15:38:44.193 回答
0

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

继承本身会对你有好处,如果你的子类有许多共同的方法,那么拥有一个基础 Archive 类会有所帮助。

于 2009-06-09T15:38:21.523 回答
0

在这个问题中,拥有 Archive 基类的好处是它应该真正指导您为客户端代码定义一组公共方法来操作存档文件,而不考虑存档格式。(做同样事情的另一种方法是定义一个 Archive 接口,所有其他类都实现该接口。但我怀疑您最终会在所有类中使用一些通用代码;将 Archive 作为您的基类为您提供放置它的好地方。)

于 2009-06-09T16:58:02.947 回答