zend-framework – DataMapper模式是否打破了MVC?

前端之家收集整理的这篇文章主要介绍了zend-framework – DataMapper模式是否打破了MVC?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在阅读多个 PHP框架,特别是Zend框架,但我对前进的正确方法感到困惑.

Zend Framework不使用ActiveRecords,而是使用表数据网关和行数据网关模式,并使用DataMapper将行数据网关的内容映射到模型,因为ActiveRecord在模型没有1时发生故障: 1映射到数据库表. Zend快速入门指南中有一个example of this.

对我来说,他们的例子看起来非常臃肿,到处都是大量的吸气剂和制定者.我发现了各种关于Domain Driven Design的博客文章,认为使用这么多的getter和setter是不好的做法,因为它将所有内部模型数据暴露给外部,因此它没有公共属性的优势. Here is one example.

我的问题:如果你删除那些getter和setter,你将如何呈现你的观点?在某些时候,数据必须点击视图,以便您可以实际向用户显示某些内容. DDD建议之后似乎打破了MVC中M和V之间的分离.继MVC和Zend之后,似乎打破了DDD,让我为所有模型输入了大量的getter,setter和DataMappers.除了做大量的工作外,它似乎也违反了DRY.

我真的很感激一些(链接)好的例子或更多关于它们如何组合在一起的信息.我正在努力提高我的架构和设计技巧.

使用Value Objects,您可以消除其中一些公共setter方法.这是 the difference between Entity and Value Objects的描述.值对象是不可变的,通常与实体绑定.如果使用构造函数传递所有值,则无需从外部代码设置这些属性.

额外的东西,与答案没有直接关系,但更侧重于DDD:

(免责声明:我对Zend Framework的唯一了解就是我在链接文章中读到的内容.)Zend Framework使用的是DataMappers而不是Repositories.这真的是DDD吗?好吧,Fowler’s interpretation of a Repository可能会说不.但是,Eric Evans表示DDD Repository可以非常简单.最简单的,Repository是一个DataMapper(参见DDD书).对于更复杂但仍然是DDD的东西,请参阅Fowler文章. DDD具有可能与模式定义不同的概念存储库.

我恳请您继续阅读有关域驱动设计的内容.我认为假设getter和setter违反DDD存在缺陷. DDD专注于领域模型和实现这一目标的最佳实践.存取器只是一个小细节.

猜你在找的PHP相关文章