我目前正在尝试重构一些遗留代码。就目前而言,我有一个EX_User
类,它代表我正在使用的系统中的通用用户。还有其他几个类扩展了EX_User
类;例如EX_Limited_User
类。
EX_User
类扩展了一个活动记录类,它将EX_User
对象映射到数据库中用户表中的一行。
我需要创建一个新类型的用户(例如New_User
),它仍然是数据支持的,但不在同一组表中(而不是通过活动记录)。由于我正在使用的应用程序已经将这些EX_User
对象传递到各处,我希望创建一个“新的”单一通用User
类,它本质上是所有用户的通用接口(无论如何)类型)。然后我会更改代码库中的所有引用以与此User
对象进行交互,实际上可能由EX_User
,EX_Limited_User
或New_User
表示。
我正在使用PHP(单继承),因此我无法对EX_User
扩展任何内容(因为它已经扩展了活动记录类型类)。
我正在寻找能够实现面向用户的单个应用程序(通用User
接口)的好方法,同时仍然能够通过任意数量的用户实现来实现该接口(以方便)新的用户实现,以及与当前用户实现的向后兼容性)。
有人能够给我一个可靠的例子来说明我将如何实现这一目标吗?具体来说,我如何组织上面列出的类,以及如何在代码中传递常规User
对象(而不是传递不同类型的对象)。我愿意传递不同类型的用户对象并依靠ducktyping(或其他东西)来实现通用性,但是如果没有明确的设计,我会害怕代码很快就会因为修改不好而生病。
我同样感谢外部参考可以实现这一目标的模式,尽管一些谷歌搜索没有出现我称之为“合适的”解决方案。
谢谢!
答案 0 :(得分:0)
我认为您可以安排上面显示的类,它将为ex_user类提供活动记录类,但您仍然可以从新记录类中为通用用户提供新的支持方法。您只需要使用这种方法更改超类ex_user。