蔡 超
SCEA,SCBCD,MCSD,IBM RUP Specilist
北京天融信软件架构师
SUN,Microsoft培训中心特邀高端教师
常年提供架构咨询服务
chaocai2001@yahoo.com.cn ,010-82776427
问题:
在spring+hibernate的常见架构中,常会应为hibernate的延迟加载遇到一些麻烦。如Hibernate的引入使用脱管领域对象直接取代了DTO,然而前台组织显示时常会应为脱管领域对象的一些关系域未被加载而抛出异常(其实延迟加载是优化系统性能的一种有效方式)。
为了使显示层正常工作,我们就必须在业务层显式的加载这些表现层会用到的延迟加载的关系域对象。而这样的工作不仅需要额外的代码,并且这些代码往往也与所进行的业务逻辑无关。并且表现层的变化较多这样一来如果上述代码进入业务层就会导致业务层跟随表现层的变化。
解决方案:
在“Spring构建应用系统的最佳架构与模式实践(1)”中将逻辑层分为了Façade和ApplicationService两层。
Façade的方法组织是针对客户端请求的,所以如果我们把业务逻辑封装在ApplicationService对象中,而把脱管对象产生(包括根据表现层初始化延迟加载对象,关闭Session)。这样便可以有效的防止表现层逻辑混入业务逻辑中。