表述

分层

上层使用下层定义的各种服务,下层对上层隐藏下下层的细节

层次并不能封装所有东西,有时会带来级联修改,过多的层次也会影响性能

三个基本层次

  • 表现层
  • 领域层
  • 数据源层

组织领域逻辑

  • 编写业务逻辑

事务脚本

优点

  • 易于理解
  • 能与简单数据源层很好合作
  • 事务边界容易划分

缺点

  • 业务复杂导致代码冗余复杂

领域模型

  • 使用面向对象的方法

开销来源于使用复杂以及数据源的复杂,还要面对将领域模型映射到数据库的问题

表模块

  • 围绕表组织领域逻辑

服务层

  • 将领域层再拆为两层,服务层提供简单的API接口

映射到关系数据库

架构模式

  • 活动记录
    • 类似于JAVA Bean
  • 数据映射器
    • ORM

行为

如何保证对领域对象的修改能及时存储到数据库

  • 标志映射
    • 保证相同的对象只被加载一次
  • 延迟加载

读取数据

结构映射模式

关系的映射

  • 外键映射一对多
  • 关联表映射多对多

继承

  • 单表继承
    • 多个层次共享同一张表

  • 具体表继承
    • 一个层次一张表

  • 类表继承
    • 一个类一张表

建立映射

将数据库设计看做一种持久化对象数据的方法

  • 双向映射
    • 将对象-数据库以及数据库-对象两种映射分开设计

元数据

  • 通过元数据的描述自动生成代码

数据库连接

  • 使用连接池管理连接
  • 将连接与事务绑定在一起

web表现层

模板视图

jsp php

转换视图

json

两阶视图

生成一个逻辑视图,再将逻辑视图对应到html

并发

本质问题

  • 更新丢失
  • 不一致读

执行语境

  • 一个请求对应一个会话,可以使进程,也可以是线程,但创建进程耗费资源,使用线程又会导致线程安全问题
  • 数据库中的语境是事务

方案

  • 隔离:划分数据,一片数据只能被一个工作单元访问
  • 不变:不变的数据是线程安全的

乐观锁与悲观锁

  • 使用读写控制
  • 死锁

事务

事务是一个又边界的工作序列,开始和结束都有明确定义

  • 事务的特性

事务资源

横跨多个请求的被称为长事务

锁升级:一个事务锁住了许多行,则直接升级到对整个表的锁

减少事务隔离提高灵活性

可串行化:当并发执行的结果与以某种顺序一致时

系统事务与业务事务

离线并发控制

只有在数据提交失败的时候才能发现

应用服务器并发

使用每会话一个进程的方式来避免处理线程的麻烦

会话状态

  • 无状态服务器

存储方法

  • 客户端存储
    • cookie
    • 注意会话数据大小以及数据安全性完整性
  • 服务器存储
    • session
  • 数据库存储
    • 将会话信息存储在数据库中

会话迁移

会话可以在服务器集群之间转移

分布

远程接口与本地接口

进程内的过程调用非常快

何时必须使用分布对象

  • 客户机与服务器之间
  • 服务器与数据库之间
  • web系统之间
  • 使用软件包

分布边界

注意远程调用的边界

分布接口

  • 基于XML与HTTP

如果系统基于相同的平台构建,最好使用系统自己的远程调用机制

results matching " "

No results matching " "

results matching " "

No results matching " "