我有一个应用程序,它定义了对常见对象类型的某些操作。
例如,您可以拥有论坛帖子和图片。对于每个论坛帖子和图片,您可以执行以下操作:推荐、评论、评分。
我目前已经定义了一个静态类
class CoreObjectUtil
{
protected static $_objObjKey = null;
protected static $_objTypeKey = null;
public static function getComments (...) {...}
public static function getCommentsArray (...) {...}
public static function getRatings (...) {...}
public static function getRatingsArray (...) {...}
}
然后像这样子类化
class ForumPostUtil extends CoreObjectUtil
{
protected static $_objObjKey = 'forumpost';
protected static $_objTypeKey = 'FP';
}
为论坛帖子提供相关功能。这 2 个参数足以让 CoreObjectUtil 中的通用代码知道对这些函数适用的每个对象类型要做什么。
要使用这些函数,我在我的实例类中调用 selectPostProcess() 类,如下所示:
public function selectPostProcess ($data)
{
$data = ForumPostUtil::mergeRatings ($data);
$data = ForumPostUtil::mergeComments ($data);
...
}
这很好用,并且将主要代码集中在 CoreObjectUtil 类中,其子类提供数据设置,让 CoreObjectUtil 中的代码知道该做什么。
另一种方法是将代码从 CoreObjectUtil 移动到基实例类中,然后在我的实例类中继承。因此,我不会从 CoreObjectUtil 调用静态方法,而是像 $this->getComments() 这样的方法调用。
从功能类型的角度来看,这两种方法都可以正常工作。然而,我想知道面向对象的设计指南和经验丰富的面向对象开发人员如何看待这两种方法。哪种方式更可取,为什么?
我将不胜感激有关此事的任何想法/见解。我可以毫无问题地编码任何一种方式,但我很难决定采取哪条路线。