企业对外提供服务,一般借助于软件应用。好比交易零售系统,用来提供购买商品的服务,这里就涉及到交易数据,这些数据会被用户“反复”的产生、查看,并且随着服务时间增加,应用自己也会面临困难算法
架构是一种主观上的东西,是对系统设计的一些可共享的“主观理解”,可共享性表如今系统中主要的组成部分以及他们之间的交互关系。对架构的定义可以统一的内容有两点:数据库
模式描述了一个在咱们周围不断重复发生的问题以及该问题解决方案的核心,这样可以一次又一次的使用该方案而不用作重复的劳动json
层次模型致力于将企业应用组织成不一样的层次,并协调各层次之间的关系后端
这里的层次是逻辑上的,不必定是物理上的隔离,全部层能够在1个服务器上,也能够是多个物理机安全
有三种组织形式 事务脚本、领域模型、表模块。服务器
他们之间并不互相排斥,能够在事务脚本中处理部分领域逻辑,同时使用表模块或者领域模型来处理剩下的部分架构
使用过程来组织业务逻辑,每一个过程处理来自表现层的单个请求。简单的来讲就是从表示层得到输入、进行校验和计算处理、将数据存储到数据库中以及调用其它系统的操做等等性能
合并了行为和数据的领域的对象模型(每一个类都有行为和数据,类之间交互来完成任务)。简单来讲就是每一个对象都承担一部分相关逻辑设计
处理某一数据库表或视图中全部行的业务逻辑的实例,它处于领域模型和事务脚本的中间地带对象
案例:对于一个给定的合同,不一样的产品种类有不一样的收入确认算法,须要计算给定合同的收入
事务脚本与领域模型的区别:
表模块与领域模型的区别:
独立出一个服务层放在领域模型与表模型之上,服务层自己有3种形式
能够在有要的时候才加服务层,若是加了也要最小化
以数据库的表结构为基础,每张表对应一个类,这种类为数据库访问提供了’入口‘。
应用程序其它部分就不须要关心SQL
入口使用方法有两种
在简单的领域模型中,模型自己和表至关一致,这时可让领域对象自己去负责数据库的存储过程(也称做活动记录),它实际就是以行数据入口开始,把领域逻辑加入到类中,可是当领域模型复杂时,入口能够解决一些问题,可是这实际上是让数据库方案和领域方案冗余在一块儿,致使部分入口域和领域对象域的转换,使得领域对象变得复杂,这时可使用数据映射器,它来处理数据库和领域模型之间的全部存取操做,而且容许两者独立变化,使两者彻底独立
使用活动记录可以解决简单的读取和存储操做,可是涉及到读取同时修改再存储等复杂操做,必须保证数据库的一致性,这种状况就能够工做单元解决。
工做单元用来充当数据库映射的控制器,它会跟踪全部从数据库读取对象以及任何形式修改对象,同时也负责从新提价到数据库。
简单的状况是由领域本身来完成,复杂状况则是交给了工做单元来作
表结构以前通常存在着 一对多,多对多这种结构,对象也须要处理好这种映射关系,方法则是在对象中使用一个标识域来保持对象之间的关系特性,并经过查找这些值来保持对象引用与关系键之间的映射。
并非全部的关系都须要外键与关系域这种映射,若是值对象很小,可使用序列化的方式直接存储到关联对象的一列中
对象自己存在继承关系,这个时候将这种结构映射到表中一般有如下三种方式:
类表继承一般须要多个链接,损失了性能;具体表该表很麻烦,一旦父类变动,全部的表都得改动;单表存在着空间浪费,单表过大也影响性能,可是修改容易并且不用链接
根据应用场景选择具体方式
模板视图:在网页结构中编写表现层,并容许在网页中嵌入标签,用以指明网页中的动态内容须要导向哪里,好比JSP 转换视图:将领域层返回的数据转换到表现成对应的结构位置上,好比根据后端的json数据反映到对应的样式表单
单阶视图:为每一个屏幕准备一个视图组件,视图提取领域数据并把它返回到HTML网页中 两阶视图:首先根据领域数据产生一个逻辑屏幕,而后发往HTML网页。每一个屏幕自己都已经有了一个第一阶段的视图,而程序中只有一个第二阶段的视图
两阶视图能够决定把什么样的HTML网页用在什么地方,另外多端(PC/PAD/手机)经过不一样的逻辑屏幕可以展现不一样的外观视图
<企业应用架构模式> 1-4 章