1

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

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

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

我正在使用 PHP(单继承),所以我无法EX_User扩展任何东西(因为它已经扩展了一个活动记录类型类)。

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

谁能给我一个可靠的例子来说明我如何实现这一目标?具体来说,我如何组织上面列出的类,以及如何User在我的代码中传递通用对象(而不是传递不同类型的对象)。我对传递不同类型的用户对象并依靠鸭式(或其他东西)来实现通用性的想法持开放态度,但我担心如果没有清晰的设计,代码可能很快就会因修改不当而生病。

我同样感谢对可以实现这一点的模式的外部引用,尽管一些谷歌搜索还没有找到我称之为“合适”的解决方案。

谢谢!

4

1 回答 1

0

在此处输入图像描述

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

于 2013-09-30T18:26:16.183 回答