hibernate:Hibernate流行架构浅析

  本文向大家介绍Hibernate架构可能好多人还不了解Hibernate架构没有关系看完本文你肯定有不少收获希望本文能教会你更多东西

  用java来建立个很有价值web 应用不是个简单任务在架构这个应用时要考虑很多原因和问题从更高层次来看开发人员面临着有关如何构建用户接口何处驻留业务逻辑以及如何实现数据持久性这些问题这3层都有各自问题需要回答而每层又需要实现那些技术?应用如何设计来进行松散耦合并能进行灵活变更?应用架构是否允许某层变更而不影响到其它层次?应用应该如何处理容器服务比如事务?

  在为你应用创建个架构的前有许多问题需要澄清幸运有很多开发者都意识到这个问题并建立了很多框架来解决这些问题个良好框架可以让开发人员减轻重新建立解决复杂问题方案负担和精力;它可以被扩展以进行内部定制化;并且有强大用户社区来支持它框架通常能很好解决个问题然而应用是分层可能每个层都需要各自框架仅仅解决UI问题并不意味着你能够很好将业务逻辑和持久性逻辑和UI 组件很好耦合例如你不应该使具有JDBC代码业务逻辑放入控制器的中这不是控制器应该提供功能个UI 控制器应该是轻量化组件由它代表对UI范围的外其它应用层服务良好框架自然地形成代码分离原则更为重要框架减轻了开发人员从头构建持久层代码精力从而集中精力来应用逻辑上这对客户端来说更为重要

  本文讨论了如何结合几个著名框架来达到松散耦合如何设计你架构以及如何达到各个层次致性设计面临挑战是将框架整合起来以使每层都向另外层次以种松散方式来暴露接口而不管底层功能使用是什么技术本文还讨论整合3种著名开源框架种策略对表现层我们使用 Struts;业务层使用Spring;对于持久层我们使用是Hibernate架构你尽可以取代这里某个框架而使用你喜欢框架已达到同样效果

  应用层

  许多设计良好web 应用可以被按职责分为 4层这些层次是表现层、持久层、业务层、和领域模型层个层次都有其独特职责不能把各自功能和其它层次相混合个应用层都应该和其它层隔离开来但允许使用接口在层间进行通信我们开始来看看每个层并讨论下它们各自都应该提供什么和不应该提供什么

  表现层

  个典型web 应用末端是表现层许多Java 开发者都知道Struts 提供了什么东西然而太多时候耦合代码比如业务逻辑被放进org.apache.struts.Action中所以我们先整理总结下Struts 的类框架应该提供什么下面就是Struts 职责所在:

  ◆管理用户请求和响应

  ◆提供个控制起来将委托到业务逻辑和其他上游处理

  ◆将来自于抛出例外其他层例外处理到Struts Action 中

  ◆组装可以在视图中表现模型对象

  ◆执行UI 校验

  下面是些经常可以使用Struts进行编码但是不应该和表现层关联事情:

  ◆直接和数据库交互比如JDBC

  ◆和应用相关业务逻辑和校验

  ◆事务管理

  ◆在表现层中引入这些类型代码将导致类型耦合和维护负担

  持久层

  个典型Web应用端是持久层这也是应用中最容易很快失控地方开发者通常低估了自己构建自己持久层框架挑战个定制内部开发持久层不仅需要大量开发时间并且通常缺乏功能和难以管理目前有许多解决这些问题开源对象关系映射 (ORM) 框架特别地Hibernate架构就允许Java中对象-关系持久性和查询服务Hibernate 对已经熟悉了SQL 和JDBC API Java开发者来或具有中度学习曲线Hibernate 持久对象基于POJO和Java 群集(collections)此外使用Hibernate 不和你IDE接口下面列出了你需要在持久性框架中编写代码类型:

  存储、更新和删除存储在数据库中信息

  高级对象关系映射框架比如Hibernate支持大部分主流SQL数据库它们支持父/子关系事务继承和多态

  下面是应该在持久层避免些事情:

  ◆业务逻辑应该置于应用更高层中这里只允许数据访问思路方法

  ◆不应该使持久逻辑和表现逻辑耦合避免表现组件如JSP或者基于servlet类中逻辑直接和数据访问进行通信通过将持久性逻辑隔离在其自己层中应用将具有更加灵活修改性而不影响到其他层代码例如 Hibernate 可以使用其他持久框架和API代替而不需要修改其它层中代码

  业务层

  典型Web应用中间组件般是业务层和服务层从编程角度来说service layer经常被忽略这种类型代码散布于UI表现层和持久层并不是不多见这些都不是正确地方它导致了紧密耦合应用和难以维护代码幸运大多数框架都解决了这个问题这个空间内最流行两个框架是Spring 和PicoContainer它们都被视为是具有非常小足迹(footpr)并且决定如何将你对象整合在微容器 (microcontainer)这些框架都建立在种叫做依赖性注入(dependency injection) (也称控制反转(inversion of control:IOC))简单概念的上我们将关注Spring中通过针对命名配置参数bean属性ter 注入使用Spring 也允许种更加高级构造器注入(constructor injection)形式作为ter injection 可选替代对象通过简单XML 文件进行连接该配置文件包含对各种对象引用比如事务管理处理器(transaction management handler),对象工厂包含业务逻辑服务对象以及数据访问对象(DAO)我们随后会用些例子来澄清Spring中使用这些改变方式业务层应该负责下面问题:



  ◆处理应用业务逻辑和业务校验

  ◆管理事务

  ◆允许和其他层进行交互接口

  ◆管理业务级对象的间依赖性

  ◆加入了表现和持久层的间灵活性以便它们不需要彼此进行直接通信

  ◆从表现层暴露上下文给业务层以获得业务服务

  ◆管理从业务层到表现层实现

  领域模型层

  最后我们要解决实际问题web应用我们需要套在区别层间移动对象领域模型层包含是表达实际业务对象对象比如Order, OrderLineItem, Product 等等层允许能让开发者不再构建和维护不必要数据传输对象DTO来匹配其领域对象例如 Hibernate允许你读取数据库信息到个领域对象对象图中以便你可以在离线情况下将其表现在UI层中这些对象可以被更新并跨过表现层发送回去然后进行数据库更新另外你不再需要将对象转变成DTO它们在区别层间移动时可能会丢失事务这种模型允许Java 开发者能够以OO风格方式很自然处理对象而不用编写额外代码以上介绍Hibernate架构



Tags:  hibernate查询 springhibernate hibernateapi hibernate

延伸阅读

最新评论

发表评论