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
Design patterns OOD:谁应该从持久层创建对象?_Design Patterns_Architecture - Fatal编程技术网

Design patterns OOD:谁应该从持久层创建对象?

Design patterns OOD:谁应该从持久层创建对象?,design-patterns,architecture,Design Patterns,Architecture,在我的软件中,我有5个主要层: 用户界面 控制器 域(业务规则) 坚持 MYSQL(数据库) 我应该将从持久性层获取域对象的责任分配给谁?我决定在域层中创建一个新分区,但控制器层这样做会使如何创建域对象变得模棱两可 我正在寻找一种优雅的解决方案,通过将域对象从持久状态中提取出来来创建域对象。如果您的持久层已经准备好,那么可以使用一些工具从DB Schema创建类 其中之一是NetBeans持久性插件 现在,您可以对域模型[从DB Schema创建的类]和实际DB使用任何ORM工具。您应该从了

在我的软件中,我有5个主要层:

  • 用户界面
  • 控制器
  • 域(业务规则)
  • 坚持
  • MYSQL(数据库)
我应该将从持久性层获取域对象的责任分配给谁?我决定在域层中创建一个新分区,但控制器层这样做会使如何创建域对象变得模棱两可


我正在寻找一种优雅的解决方案,通过将域对象从持久状态中提取出来来创建域对象。

如果您的持久层已经准备好,那么可以使用一些工具从DB Schema创建类

其中之一是NetBeans持久性插件


现在,您可以对域模型[从DB Schema创建的类]和实际DB使用任何ORM工具。

您应该从了解上下文/用例的层中检索持久化层中的对象

换句话说:在您实现用例的层中,您应该调用存储库(或其他持久性层对象),它可以从数据库检索(或保存)您的对象。
嗯,这是唯一正确的做法。它是具有“上下文”知识的层(了解全局的层),也具有事务的“生命周期”知识。该层还负责事务管理。

在持久性层中,我有一些类具有工厂方法,如create(Class-typeClass,String-oid),它从存储中创建一种类型的类,id等于oid。我将从控制器访问此方法,但无需直接访问。感谢弗雷德里克的回答,我认为你完全正确!所以我可以在域层创建一个包存储库,并从控制器(管理用例)调用存储库的类来获取和保存模型对象。。。是这样吗?