设计模式:工厂和存储库

时间:2009-10-29 15:55:36

标签: user-interface design-patterns domain-driven-design

我一直想知道 Factory Pattern Repository Pattern 是否需要在Domain Driven Design项目中齐头并进?

我问的原因是我这样做的方式是这样的:

GUI - > ClassFactory - > ClassProduct(在域模型中) - > ClassProductRepository - >数据源

GUI调用ClassFactory将GUI与业务逻辑分开。 ClassProduct调用ClassProductRepository将业务逻辑与数据源分开。

将这些设计模式与域驱动设计一起使用是错误的方法吗?如果是,请说明您对此主题的意见。

2 个答案:

答案 0 :(得分:8)

你走在正确的轨道上。正如Chad指出的那样,您将希望使用GUI界面分离模式作为域和UI之间的附加层。建立了MVC,MVP,演示模型等,并为UI分离提供了详细记录的模式。 Martin Fowler的优秀PoEAA涵盖了其中许多

至于你的主要问题。是。工厂和存储库可以很好地协同工作。实际上,Evans在DDD中建议,在某些情况下,当您从数据存储重构对象时,可以将对象创建的责任委派给您的工厂类。

client <=> repository -> factory
               |
               v
            database
  1. 客户端请求来自的对象 存储库。
  2. 存储库查询数据库。
  3. 存储库将原始数据发送给 工厂。
  4. 工厂返回对象。
  5. 过度简化但你明白了。埃文斯没有涉及的一点(但福勒所涵盖的)是依赖注入。随着域复杂性的不断增长,您可能需要考虑转移到IoC容器来管理对象生命周期。

答案 1 :(得分:1)

我建议坚持使用MVC作为将业务逻辑与视图和控制器分开的通用方法。这已被充分记录并且经过充分研究的方法,尽管它是我们目前最好的方法。

尽管如此,您似乎只是因为使用该模式而尝试使用该模式。这对学习很有帮助,但在大多数应用程序系统中,我已经看到你所描述的模式要么不存在,要么更简单的方法有效,要么维持它的噩梦。

请参阅我之前对类似问题的回答,该视频的视频可以在将来帮助您进行设计。
Linky