【发布时间】:2014-11-11 18:18:57
【问题描述】:
我们正在用 OOP 重写我们的代码,我正在尝试为未来的项目设计一个通用框架(主要是为了遵守 DRY 并保持代码精简和一致)。
例如,我认为有一个基类DatabaseObject 会很好,它将从数据库行中获取其属性。它会(除其他外)使用__call() 和property_exists() 来自动化大多数吸气剂。这样一来,我们就不必为数据库行中的每一列潜在地编写所有 100 多个 getter(或在每次更改表时更新类代码)。
Customer、Car 或 Article 等其他类将扩展 DatabaseObject(如果它们来自数据库)并继承这些方法,因此我们不必将特定于数据库的代码复制到每个班级都是分开的(随着时间的推移,这会变得越来越不一致)。
这是在 Web 项目中正确使用继承的方式,还是这种糟糕的设计?我的同事争辩说,这在某种程度上是对继承的滥用,从 CSV 文件获取的客户需要单独的类定义,这是一个有效的观点。
使用接口,我们仍然需要将代码复制到每个类中,并且特征(除了需要 PHP 5.4)不适用于我上面的 __call() 示例(我认为)。
那么有没有更好的方法来实现我的DatabaseObject 概念?
编辑:有人可以向我解释拒绝投票的原因,以便我可以删除并以适当的方式重新提交我的问题吗?
【问题讨论】:
-
自动化 getter 将导致缺少自动完成功能。您至少需要在子类中用
@method注释它们。制作一些代码生成工具,在从数据库中提取信息的同时创建带有注释的实体。您可以查看一些依赖此策略的现代 ORM。 -
@sjagr 感谢您的回复。我们实际上已经符合 PSR。但据我所知,它不涉及这样的细节。
-
为什么不使用 ORM,比如 Doctrine 2?您仍然可以为您的实体(数据库对象)、所有实体的通用行为,甚至不对应于数据库表的对象使用基础数据类
标签: php oop inheritance