【问题标题】:Business logic and data mappers in Zend FrameworkZend Framework 中的业务逻辑和数据映射器
【发布时间】:2010-11-10 11:03:48
【问题描述】:

我不情愿地为我当前的项目采用了数据映射器方法,但我有点困惑。

商业模式

一个工人有一个名字、一组工作时间和一个成本。

数据模型

一个工人由一个劳动类型和一个工作模式(三个不同的表)组成。工人的成本是根据劳动力类型和工作模式的组合来计算的。

我的问题...

我好像有两种不同的模型,一种代表业务逻辑,一种代表数据结构。我的理解是我的模型应该代表业务逻辑,但是当我想插入一个新的工作人员时会发生什么?这是使用带有两个下拉菜单的表单完成的,即工作模式和成本,业务模型不需要它们的 id。

困惑?我是。

【问题讨论】:

  • 如果您创建对象模型,用数据填充它,然后传递给数据映射器,以便它选择使用您的数据模型插入​​的位置不起作用?

标签: zend-framework data-modeling


【解决方案1】:

zend 框架对数据模型没有真正的支持。但是weierophinney 很好地展示了如何实现它们。另一个很好的描述是this one
通常,模型代表数据并包含逻辑。数据模型是一种独立于后端的写入/获取数据的方式。对于模型和应用程序,数据来自何处并不重要。因此,无需接触其他任何东西即可交换数据存储。

【讨论】:

  • “没有真正的支持”是什么意思?你能澄清一下吗?
  • @kayne :它目前将数据库中的数据集视为模型。因此,模型与特定的存储相关联,这完全违背了模型的想法。一般来说,模型只是一个代表数据和业务逻辑的对象——完全独立于存储引擎。为什么这是个坏主意? Weir O'Phinney 很好地解释了这一点(链接 1)。
  • 但是有一个真正的实现:你可以有一个Model_Worker,一个Model_WorkerDataMapper,最后是一个Model_DbTable_Worker
  • @kayne:这就是你/我将如何实现它。但是 zend 框架中没有模型或映射器的抽象/接口。仅适用于 Model_DbTable_Worker。
  • 是凯恩而不是凯恩 =P。如果您输入错误的用户名,我将看不到 cmets 通知...回到主题,我同意您的看法。但是,定义分离模型类及其常用方法的模式的名称是什么?有吗?
【解决方案2】:

Zend Framework (Zend_Db_Table) 中的默认数据建模可能不是面向对象数据建模的最佳选择。

尝试使用像 Doctrine (http://www.doctrine-project.org/) 这样的 ORM,它允许您创建域对象模型并将其几乎透明地存储在数据库中。这样您就可以将业务模型和数据模型组合在一个类中。

【讨论】:

  • 您能列举出使 zend-db-table 成为错误选择的原因吗?
  • 我也在想同样的事情。似乎很多人都在追随 GOF、Martin Fowler、Eric Evans 等书籍的这种营销鼓点,但似乎几乎没有人能够真正解释为什么我的项目会从他们的想法中受益。相比之下——Wordpress 没有单一的抽象或接口类——这是一个非常成功的产品。我认为以结果为导向可能比在 analisys-paralisys 上花费数年时间而无处可寻的好处更好。
  • @Andre - Wordpress 非常流行并不意味着它写得很好。我真的不喜欢使用它的代码库,并且发现它很难适应我的需求。可能是因为作者更关注结果,而不是制作易于扩展/可扩展/可适应的东西。根据您的项目,使用完整的数据建模或使用 ORM 可能有点过头了,但如果您正在考虑这个主题,那么值得研究替代方案。
猜你喜欢
  • 2015-04-23
  • 2011-05-12
  • 2018-11-10
  • 2013-10-27
  • 2011-01-30
  • 2012-03-21
  • 2018-11-01
  • 2010-12-22
  • 1970-01-01
相关资源
最近更新 更多