业务层设计之五(BusinessObject)
来源:百度文库 编辑:神马文学网 时间:2024/07/08 09:55:22
业务层设计之五(BusinessObject) Business Object(业务对象) 问题 有一个业务领域概念模型,其中包括业务逻辑和关系。 如果业务操作中只有很少甚至没有业务逻辑,那么应用系统通常会让Client直接访问数据 存储中的业务数据.比如说一个表现层组件或者一个业务层组件,都可能直接访问DAO. 这种情况下,业务层中就没有"对象模型"的概念了.应用需求由一个面向过程的实现完成。 但是如果概念模型包含了多种业务功能和关系,那么面向过程的这种实现方式会导致: 1. 降低了可重用性,业务逻辑代码发生了重复。 2. 面向过程的系统实现变得臃肿,即冗长又复杂。 3. 系统可维护性很低,因为代码重复多,业务逻辑分散。 术语解释 业务模型: Business Model由两种模型构成:业务用例模型描述的是业务角色和业务过 程,而业务对象模型描述的是业务用例所使用的业务实体。 业务领域模型: Domain Model定义为一种抽象模型,它固化了在系统的上下文环境中 最重要的若干对象.它代表着在系统运转的环境中存在的一些东西和发生的一些事情。 概念模型: 概念模型指的是抽象概念,它描述的是业务领域实体,实体关系以及业务规则。 对象模型: 对象模型是概念模型的一种具体的OO实现.实现概念模型所需要的类和关系。 数据模型: Data Model指的是数据实现模型,比如用于RDBMS数据库的ER模型。 动机 1. 概念模型包含结构化的,相互关联的复合对象。 2. 概念模型包含复杂的业务逻辑,验证和业务规则。 3. 把业务状态和业务功能同系统的其他部分区分开,增进系统的内聚和可重用性。 4. 集中应用系统中的业务逻辑和业务状态。 5. 提高业务逻辑的可重用性,避免代码重复。 实现业务对象,主要有两种策略(都要考虑安全性,事务管理,池,缓存,并行处理等需求)。 1. 使用POJO,且选择一种适合需要的持久化机制。如定制DAO,标准JDO实现等。 2. 使用EntityBean,使用这个策略还要决定是使用BMP(用到DAO)还是CMP来完成持久化。 结构 Client(facade,service,helper)---->ParentBO(data store)---->DependentBO(datastore) 客户端: Client代表了BO的客户端,它通常可能是服务门面,助手对象或应用服务。 父业务对象: ParentBO是顶级BO,它封装了从属对象,实现了自身内部业务逻辑和规则。 从属业务对象: DependentBO和父业务对象存在着紧耦合,依靠父对象实现生命周期管理。 从属对象不能脱离父对象独立存在。每个从属对象都要实现它自身的内部业务逻辑。 策略 POJO业务对象和EntityBean业务对象之间的功能比较: 1. 安全性: 如果由会话门面管理对POJO业务对象的所有访问,那么安全模型就能够由 EJB容器提供。如果不用EJB,就只能用定制框架,或者使用JAAS实现系统安全性。 2. 事务: 与安全性类似.不采用EJB,那么很可能就要依靠持久化策略来实现事务服务了. 3. 缓存和池: EJB容器管理EntityBean生命周期,EntityBean通常不被缓存,而是用实 例池。POJO业务对象除非实现专门的Cache技术(或者池),但是增加了应用系统的 复杂度。对单线程空间的POJO应用系统来说,实现缓存相对容易;但是对于多层 分布式的应用系统来说,同一个页 4. 并行: POJO需要使用某种锁定机制一直维持数据完整性。EJB容器管理并行请求。 5. 数据同步: 在多层应用系统中,如果不同的JVM或容器中存在着同一个业务对象的实例. 那么,就确保BO的一个实例上发生的修改要传播给所有现存的示例,保证数据同步。 6. 持久化: 用CMP和CMR或者选用BMP(自编码实现BO关系)实现定制的持久化机制。 POJO实现持久化可利用DAO,业务领域存储,JDO或者商业ORM工具等。 示例 本例示范了POJO业务对象策略.EntityBean实现业务对象策略请参考复合实体模式示例。 public class CustomerBO { //CustomerData是数据对象 private CustomerData customerData; //ContactInfoBO是从属业务对象 private ContactInforBO contactInforBO; public CustomerBO(CustomerData customerData) { //验证customerData的值 .......... //把客户端数据复制到这个对象中 this.customerData = customerData; } public ContactInfoBO getContractInfoBO() { if (contactInfoBO == null) { contactInfoBO=new ContactInfoBO(customerData.getContactInfoData()); } return contactInfoBO; } //CustomerBO的业务方法 } public class ContactInfoBO { //ContactInfoData是数据对象 private ContactInfoData contactInfoData; public ContactInfoBO(ContactInfoData contactInfoData) { //validate this.contactInfoData = contactInfoData; } public AddressData getAddressData() { return contactInfoData.getAddressData(); } }
业务层设计之五(BusinessObject)
业务层设计之五(BusinessObject)
业务层设计之三(SessionFacade)
业务层设计之二(ServiceLocator)
业务层设计之二(ServiceLocator)
业务层设计之三(SessionFacade)
乱砍设计模式之五
Scott Mitchell 的ASP.NET 2.0数据教程之二:创建一个业务逻辑层
图层蒙版之五大功能(四)——配合调整层创造神奇
招聘业务及设计人员
管理的五层境界
炒股的五层境界
管理的五层境界
业之峰装饰设计篇之“五大主流生活,十大设计风格”_
19《赵州桥》教学设计之五 - 台州市双语学校
追求神乎其技的程式设计之道(五)
面向对象的应用服务层设计
高速PCB设计的叠层问题
面向对象的应用服务层设计
OSI七层模型与TCP/IP五层模型
转载《.NET框架设计之五------------异常设计(异常与返回值)》 - keke - 博客园
使用acegi在业务逻辑层获得Web层的用户ID
业务之道
业务之成交技巧