如何通过单个公共接口(类)抽象出对不同类型对象的访问?

时间:2013-09-27 01:43:32

标签: php design-patterns interface abstract-class

我目前正在尝试重构一些遗留代码。就目前而言,我有一个EX_User类,它代表我正在使用的系统中的通用用户。还有其他几个类扩展了EX_User类;例如EX_Limited_User类。

EX_User类扩展了一个活动记录类,它将EX_User对象映射到数据库中用户表中的一行。

我需要创建一个新类型的用户(例如New_User),它仍然是数据支持的,但不在同一组表中(而不是通过活动记录)。由于我正在使用的应用程序已经将这些EX_User对象传递到各处,我希望创建一个“新的”单一通用User类,它本质上是所有用户的通用接口(无论如何)类型)。然后我会更改代码库中的所有引用以与此User对象进行交互,实际上可能由EX_UserEX_Limited_UserNew_User表示。

我正在使用PHP(单继承),因此我无法对EX_User扩展任何内容(因为它已经扩展了活动记录类型类)。

我正在寻找能够实现面向用户的单个应用程序(通用User接口)的好方法,同时仍然能够通过任意数量的用户实现来实现该接口(以方便)新的用户实现,以及与当前用户实现的向后兼容性)。

有人能够给我一个可靠的例子来说明我将如何实现这一目标吗?具体来说,我如何组织上面列出的类,以及如何在代码中传递常规User对象(而不是传递不同类型的对象)。我愿意传递不同类型的用户对象并依靠ducktyping(或其他东西)来实现通用性,但是如果没有明确的设计,我会害怕代码很快就会因为修改不好而生病。

我同样感谢外部参考可以实现这一目标的模式,尽管一些谷歌搜索没有出现我称之为“合适的”解决方案。

谢谢!

1 个答案:

答案 0 :(得分:0)

enter image description here

我认为您可以安排上面显示的类,它将为ex_user类提供活动记录类,但您仍然可以从新记录类中为通用用户提供新的支持方法。您只需要使用这种方法更改超类ex_user。