绕过 ORM 类已经扩展了 DB 类并且您需要它从抽象类扩展的事实

Posted

技术标签:

【中文标题】绕过 ORM 类已经扩展了 DB 类并且您需要它从抽象类扩展的事实【英文标题】:Going around the fact that ORM Class already extends DB Class and you need it to extend from Abstract class 【发布时间】:2012-02-22 05:55:14 【问题描述】:

我的问题与 php 有关,但它可能与具有对象关系映射器的任何其他语言有关。

假设我有一个扩展 DbObject 的类事件和扩展 DbObject 的异常,但我希望它们都从抽象类 TimePeriod 扩展。两个对象都是 ORM 对象。

为什么?因为我不想在每种具有开始和结束日期的类上手动编写 getStartTimeStamp() 代码。

现在我正在使用接口,但我觉得它真的很伤它的干性。

我是否只是简单地重新设计它,以便抽象类 TimePeriod 扩展 Dbobject 并实现从它扩展的每个对象?还是有更好的解决方案?

【问题讨论】:

为什么异常类会扩展 dbobject 类? B/c 生成的 ORM 对象,它可以运行查询。 哪个 ORM? getStartTimeStamp() 会做什么? 【参考方案1】:

您面临的多继承问题的一般解决方案是聚合/组合。

它还使您的设计更清晰。例外毕竟不能是一个时间段。

因此,您需要创建一个 TimePeriod 类并将该类的对象传递给 Exception 和 Event。 然后您可以像这样直接在时间段对象上调用 getStartTimeStamp():

$event->getTimePeriod()->getStartTimeStamp();

或者创建包装方法并调用它们。

【讨论】:

以上是关于绕过 ORM 类已经扩展了 DB 类并且您需要它从抽象类扩展的事实的主要内容,如果未能解决你的问题,请参考以下文章

将 Zend_Db 与 ORM 类混合

orm的操作

学说 ORM 和具有抽象类策略的工厂

orm 常用字段及参数

Django之ORM操作

各种ORM框架对比(理论篇,欢迎来观摩)