【发布时间】:2013-09-27 01:43:32
【问题描述】:
我目前正在尝试重构一些遗留代码。就目前而言,我有一个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 对象(而不是传递不同类型的对象)。我对传递不同类型的用户对象并依靠鸭式打字(或其他东西)来实现通用性持开放态度,但我担心如果没有清晰的设计,代码可能很快就会因修改不当而生病。
我同样感谢外部引用可以实现这一点的模式,尽管一些谷歌搜索还没有找到我称之为“合适”的解决方案。
谢谢!
【问题讨论】:
标签: php design-patterns interface abstract-class