Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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/0/laravel/10.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
Hibernate 域模型对象是否在层之间传递?_Hibernate_Spring_Model View Controller_Orm_Spring Mvc - Fatal编程技术网

Hibernate 域模型对象是否在层之间传递?

Hibernate 域模型对象是否在层之间传递?,hibernate,spring,model-view-controller,orm,spring-mvc,Hibernate,Spring,Model View Controller,Orm,Spring Mvc,我正在做一个使用hibernate和spring的项目。Hibernate封装在DAO层中,DAO层也有相应的服务层,还有为请求和JSP页面映射的控制器。我被告知不要在这些层(控制器服务DAO)之间传递对象,因为这是性能开销。一个特定的实例是,当我需要更新域对象(ORM类)中的布尔值时,我编写了一个在服务层和DAO层之间传递域对象的方法,并且被告知只传递对象ID和特定的布尔值,并在层中为此编写单独的方法。是这样吗?我觉得这样做会使使用ORM工具(Hibernate)的许多优点失效。我这么想是不是

我正在做一个使用hibernate和spring的项目。Hibernate封装在DAO层中,DAO层也有相应的服务层,还有为请求和JSP页面映射的控制器。我被告知不要在这些层(控制器服务DAO)之间传递对象,因为这是性能开销。一个特定的实例是,当我需要更新域对象(ORM类)中的布尔值时,我编写了一个在服务层和DAO层之间传递域对象的方法,并且被告知只传递对象ID和特定的布尔值,并在层中为此编写单独的方法。是这样吗?我觉得这样做会使使用ORM工具(Hibernate)的许多优点失效。我这么想是不是错了?任何建议和见解都是有用的

你是100%对的。这是个糟糕的建议。把物体传来传去。这正是Hibernate的设计目的,而正常传递对象的“性能开销”简直是疯了。除非你不知道应用程序的某些方面,否则要小心告诉你的人的建议。

与大多数架构问题一样,这里需要权衡

对于不希望使用面向服务的体系结构的应用程序(例如,具有支持数据库的自包含网站、单个内部业务应用程序),最好在应用程序的所有层公开您的域模型。这确保了您不会违反DRY(不要重复您自己)原则,并且不必在每次向域模型添加新属性时进行大量重构。您还可以使用类似NHibernate验证器的框架一次性定义所有验证,并将该验证用于数据层和web层

对于包含许多独立服务的大型应用程序(例如大型内部业务应用程序套件),最好将ORM与服务接口分离。这将允许您在不更改服务接口的情况下更改数据访问模型(反之亦然),当许多其他服务依赖于您的接口保持稳定时,这一点非常有价值

但是,您所描述的情况(使用方法更改特定属性)似乎与这两种情况都不匹配:遵循您所描述的模式通常是一个坏主意,因为这会使跟踪执行路径和重构变得非常困难(并且可能导致意式代码)。我能想到的唯一可能的用途是,如果您的数据模型非常大(5k个XML blob等),并且通过服务层发送它们将产生大量流量。(注意:如果序列化正确,C#对象比5k小得多!)


我建议您将整个数据访问模型传递到web层。

过早优化是万恶之源

即使在50纳秒很重要的高频交易中,你也要先做正确的事情,然后根据需要进行优化。你会惊讶于现代编译器/网络带宽能做什么

要更直接地回答您的问题,请=>传递这些对象,不要考虑性能。如果以后需要的话,您会这样做,但它不太可能是由传递对象引起的