关于组织类并命名它们的问题

时间:2009-06-09 15:31:46

标签: php naming

我正在编写一组类: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”文件(以及所有其他文件)的优缺点是什么?

您对我的方法有任何建议或论据吗?我做的事情有什么不好吗?

6 个答案:

答案 0 :(得分:2)

我喜欢Zend Framework方法。

文件:

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

答案 1 :(得分:1)

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

$archive = new Archive_Zip();

完成。无需使其复杂化。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

他们应该遵守相同的合同并分享共同的功能吗?大概。这很好地利用了抽象。

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

答案 4 :(得分:0)

我个人对抽象类没有多大用处。最好的情况是,它们似乎是对您自己的代码的检查,确保您已在子类中定义了一组方法。

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

答案 5 :(得分:0)

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