【问题标题】:Fowler's Patterns: Dealing with table inheritance in a specific wayFowler 模式:以特定方式处理表继承
【发布时间】:2014-02-28 23:03:06
【问题描述】:

这几天在看 Martin Fowler 的企业应用架构模式,真的很棒。

自从我开始了一个 OO PHP 项目(应用程序后端)以来,我想将 Data Mapper 用于我的域模型。我阅读了有关表继承的信息,发现它有 3 种类型。

我不喜欢 Single,因为我将有多个条目类型,这些条目将从基类/类型中继承。在这种情况下,我会在数据库中有很多空白空间。

我认为其他两个也不合适。

这是由于我的计划:

  1. 基类(条目)
  2. 子类(例如:StateInstitution 扩展条目)
  3. 子类(例如:CompanyAffiliate 扩展条目) ....

这里的重点是我打算将子类的额外信息保存到一个公共表 tbl_entrymeta 中——也就是说,我可以有许多从基本 Entry 类扩展的子类,但不能为每个子类创建一个单独的表 (只有一个,tbl_entrymeta)。

我的问题是:如何在这种情况下使用 Data Mapper?是创建继承映射器的关键吗?还是元数据映射器是关键?

【问题讨论】:

  • “领域模型”是描述特定业务领域累积知识总和的术语。所述代码中的知识使用domain pbjects体现。

标签: java php oop design-patterns inheritance


【解决方案1】:

为表示关系数据库表 tbl_entrymeta 的对象的公共表 (EntryMeta) 创建一个 Data Mapper 类。该对象将在 3 个字段(列)中保存子类的元数据:

1. SubClass
2. FieldName
3. FieldType

通过这种方式,您可以轻松存储继承基类的所有子类的元数据,并使用其他信息字段对其进行扩展。

【讨论】:

  • 数据映射模式的重点是将存储细节与域逻辑分离。
猜你喜欢
  • 1970-01-01
  • 2010-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多