Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
User interface 设计模式:工厂和存储库_User Interface_Design Patterns_Domain Driven Design - Fatal编程技术网

User interface 设计模式:工厂和存储库

User interface 设计模式:工厂和存储库,user-interface,design-patterns,domain-driven-design,User Interface,Design Patterns,Domain Driven Design,我一直在想,工厂模式和存储库模式是否渴望在领域驱动的设计项目中携手共进 我问的原因是我这样做的方式是这样的: GUI->ClassFactory->ClassProduct(位于域模型中)->ClassProductRepository->Datasource GUI调用ClassFactory将GUI与业务逻辑分离。ClassProduct调用ClassProductRepository将业务逻辑与数据源分离 将这些设计模式用于领域驱动设计是否是一种错误的方法?如果是的话,请说明你对这个问题的

我一直在想,工厂模式和存储库模式是否渴望在领域驱动的设计项目中携手共进

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

GUI->ClassFactory->ClassProduct(位于域模型中)->ClassProductRepository->Datasource

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


将这些设计模式用于领域驱动设计是否是一种错误的方法?如果是的话,请说明你对这个问题的看法

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

尽管如此,您尝试使用该模式似乎只是为了使用该模式。这对学习很有好处,但在大多数应用程序系统中,我看到您描述的模式要么不存在,要么更简单的方法可以工作,要么维护起来就是一场噩梦

请参阅我之前对类似问题的回答,其中有一段视频可以帮助您在未来进行设计。

你的工作在正确的轨道上。正如Chad指出的,您需要使用GUI界面分离模式作为域和UI之间的附加层。MVC、MVP、表示模型等都已建立,并有很好的文档化UI分离模式。马丁·福勒的优秀作品涵盖了其中的许多方面

至于你的主要问题。对工厂和存储库一起工作得很好。事实上,Evans建议,在某些情况下,当您从数据存储重建对象时,可以将从存储库创建对象的责任委托给factory类

client <=> repository -> factory
               |
               v
            database
客户端存储库->工厂
|
v
数据库
  • 客户机从中请求一个对象 存储库
  • 存储库查询数据库
  • 存储库将原始数据发送到 工厂
  • 工厂返回对象

  • 过于简化,但你明白了。Evans没有提到的一点(Fowler也谈到了这一点)是依赖注入。当您的域复杂性继续增长时,您可能需要考虑移入IOC容器来管理对象生命周期。 我使用它不是为了使用它。我希望我的系统是低耦合的,所以我得到了一个易于维护的系统。我知道MVC将帮助我实现这个目标,但我也希望模型层是低耦合的。因此,要使用主题中的示例,我们可以将GUI与我想从模型层使用的任何类交换。这种方法会将我的低耦合愿望发挥到极致吗?在“模型”中,您可以使用状态模式来实现您自己的模型,这些模型可以随时替换。虽然在大多数情况下,如果你能从逻辑上把你的模型和你的观点分开,你会领先于游戏。