【问题标题】:How can I abstract away access to different types of objects through a single common interface (class)?如何通过单个通用接口(类)抽象出对不同类型对象的访问?
【发布时间】:2013-09-27 01:43:32
【问题描述】:

我目前正在尝试重构一些遗留代码。就目前而言,我有一个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 对象(而不是传递不同类型的对象)。我对传递不同类型的用户对象并依靠鸭式打字(或其他东西)来实现通用性持开放态度,但我担心如果没有清晰的设计,代码可能很快就会因修改不当而生病。

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

谢谢!

【问题讨论】:

    标签: php design-patterns interface abstract-class


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2015-08-17
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 2018-12-16
      • 2019-03-07
      • 1970-01-01
      • 2022-07-10
      相关资源
      最近更新 更多