问题标签 [poeaa]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3239 浏览

design-patterns - 使用 Zend Framework 2 将数据库列映射到域模型

我一直在做大量的研究,但无法找到这个看似流行的问题的答案。

我有一个包含一些属性的域模型 - 比如说firstNamelastName- 但在我的数据库中我将​​它们存储为fnameand lname

根据良好PoEAA的规则,模型应该不知道它是如何存储的,如果有的话。所以我的问题是,这些字段的映射到哪里去了?

查看实现接口的现有类的源代码,Zend\Stdlib\Hydrator\AbstractHyrdrator我看不到它们中的任何一个提供映射功能。

有没有人看到一个不污染模型的干净解决方案?

更新:更好更简单的解决方案

自从我问这个问题以来已经有一段时间了,但是这里将是一个非常简单的解决方案,可以将列映射到对象而无需太多开销。使用 ZF2 的内置命名策略功能可以实现所需的效果。

输出:

0 投票
0 回答
61 浏览

php - 使用表数据网关模式时,对象的关联对象应该在哪里恢复?

我有一个类User,它的属性addressAddress. 我正在使用表数据网关模式来管理User对象的持久性。

假设Address类有自己的表网关,谁应该负责设置User'address属性?

作为我在 PHP 中询问的示例:

0 投票
2 回答
1120 浏览

ruby-on-rails - 两步视图模式

Martin Fowler 的PoEAA 目录就像 Ruby gems 和 Rails 模块的存储库,例如 Rails 的 ActiveRecord ORM 基于 Fowler 的ActiveRecordDataMaper gem基于Data Mapper 模式Martin Fowler 的两步视图模式在 Ruby 中是否有任何有用的实现,例如与模板引擎结合使用?

0 投票
1 回答
58 浏览

c++ - 在 C++ 中使用映射器处理派生类创建

我现在正在阅读 Martin Fowler 关于对象关系结构模式的 PoEAA。作为一个学习它们的项目,我想我会用 C++ 构建一个迷你电子商务系统。我无法弄清楚如何从映射器返回对象。

我有一个Product基类,它有派生类HatShirt. Products有一个type成员来标识它们是哪个派生类。我还有一个ProductMapper类,它带有派生类HatMapperShirtMapper,所有这些都实现了一堆查找器方法,这些方法让我可以尝试检索某些帽子和衬衫。

在我将实例化这些映射器并检索产品的应用程序的逻辑部分中,我遇到了麻烦。我可以毫无问题地实例化 aHatMapper并拉回对象,与 a和对象相同。这些模式在这些情况下工作得很好(特别是我使用类表继承,即一个带有产品数据的产品表,一个带有帽子特定数据的帽子表,以及一个带有衬衫特定数据的衬衫表)。HatShirtMapperShirt

我的问题是,如果我想取回所有产品,包括帽子和衬衫,我该怎么办?我可以实例化 aProductMapper并获取所有产品数据,但这似乎是错误的方法,因为我必须循环遍历所有Products我检索和构建的数据,HatsShirts根据它们在我的程序逻辑部分中的类型。此外,当我添加新产品类型时,我必须修改任何以这种方式处理这种情况的代码。似乎很糟糕。

Fowler 书中有使用派生映射器的基本映射器的映射器示例,这对我来说似乎完全错误(每次添加新产品时都必须修改基本映射器,不是很好)。这是一个如何在那里完成的快速示例:

这是我在程序的逻辑部分中使用它的方法。书中没有提供这样的例子:

这将引入循环依赖。此外,假设我以某种方式消除了循环依赖关系,则HatMapperShirtMapper类的结果是Hat对象和Shirt对象。因此,当我从 中返回时ProductMapper,我会感到沮丧,所以我不得不再次在我的逻辑中操作结果,这再次引入了在我引入新产品类型时修改代码的问题。

我不知道该怎么办。在一个完美的世界里,我想要一个Product类和一个ProductMapper类,我可以快速扩展这两个类,引入新的产品类型而无需修改现有代码(至少太多)。

我希望能够使用 PoEAA 中的这些模式,它们看起来确实不错且有用,但我不确定这是否只是我无法在 C++ 中做的事情,或者我错过了一些阻止我做的事情。替代模式和方法也非常受欢迎。

0 投票
2 回答
86 浏览

oop - 对象集合、对象聚合、对象关联和对象组合之间有什么区别?

我看到使用了这些术语,我认为我自己对它们的使用可能不正确。我想知道它们到底有什么不同。

对象集合- ???

对象聚合- ???

对象关联- ???

对象组合- ???

似乎这些术语是最近在谈论 ORM、数据映射器和存储库时出现的。例如,Fowler在这里提到了对象集合。这些术语的具体含义是什么,我应该如何在口语中有效地使用它们?

0 投票
1 回答
50 浏览

oop - 从备份恢复应用程序时如何临时规避域对象的创建合同?

我们应用程序的领域模型对象具有带有非平凡契约的构造函数。例如,Entry 对象需要 Catalog 对象才能创建。问题是,当我从 XML 文件批量恢复对象时,必须暂时违反这些合同,因为在完全处理备份文件之前,依赖对象可能不可用。

这个问题有什么既定的模式或解决方案吗?

0 投票
1 回答
991 浏览

html - XSLT position() 函数在两步视图中未按预期工作

在尝试实现 Martin Fowler 所描述的模式“两步视图”时,我在让 HTML 表的交替行着色工作时遇到了一些问题。这使用 XSLTposition()函数。您可以在下面看到 XSLT 模板table/row。但是,在输出中,元素的bgcolor属性tr始终为"linen",表明 的值position()不会随着我们迭代table/row元素而改变。为什么会这样?

输入 XML:

输出 HTML: