1 目录
第1部分
模式与设计原则
第2部分
剖析 asp.net应用程序,学习并应用模式
第3部分
案例研究
2.反模式智能UI
反模式:智能UI
sql server SQLEXPRESS 版本
1. 建立 Shop.mdf
2. html
3. cs代码
该页面负责业务逻辑,数据访问.
3.数据访问层
应用程序分层与关注点分离
企业级分层设计的asp.net应用程序的典型体系结构
1. 用户体验
2. 表示
3. 应用程序服务
4. 领域模型、领域服务
5. 基础设施、资源库 ------------------>数据库
数据访问层
1. Linq to sql
2. 在业务层中创建 IProductRepository 接口
3.创建 ProductRepository 类实现 IProductRepository
在FindAll方法中,查询Linq to sql 获取所有的商品,然后创建业务实体 Product 列表并返回
4. 业务层
1. 应用程序的业务逻辑
建立折扣策略
建立价格类,依赖注入IDiscountStrategy
建立product 类
折扣工厂类:
集合扩展类:
服务类:
5. 服务层
客户端与服务端交互,采用request/response 模式
将product 实体转化成ProductViewModel
添加Productservice 与领域模型交互
6. 表示层
表示逻辑和用户体验分离,MVP模式
可以加任何形式的用户体验,wpf , winform ,web等
7 .用户体验层
创建IProductRepository 接口的一个具体实现
structureMap Ioc容器
html
8.事务脚本模式
Transaction Script
过程式开发风格,为每个业务事务创建一个单独的方法,并将他们组合起来放入某种静态管理程序或服务类
适合小型应用程序
9.Active Record
适合在数据模型和业务模型之间具有一对一映射关系的简单应用程序,如博客,论坛
asp.net mvc + castle +nhibernate
1.创建 Blog.mdf
2.Model
3. Controller
4. view
5 Global.asax
6. web.config
10. Domain Model
业务实体并不知道如何持久化,没有必要在数据模型和业务模型之间简历一对一的映射关系,采用Repository负责数据持久化
实体: 需要标识符的事物
值对象:没有标识,不会单独存在,通常是实体的属性。
Transaction,只存在于与之相关的银行帐号实体中,在其上下文中并不单独存在.
领域服务:
有些动作没有很好的映射到领域实体的方法,那些没有真正位于单个实体中或者需要访问资源库的方法都被放到领域服务中
1. Model
事物+行为
2. Repository
3. Services
ViewModel: 提供了领域模型用于表示的展开视图
Messages + ViewModels
应用程序服务:并不包含业务逻辑
4. UI
11.用户体验层
理解ajax模式
异步javascrip和xml,一种从浏览器到服务器简历异步客户端回调的编程方式
底层采用的是XMLHttpRequest对象
javascript库:
script.aculo.us , dojo toolkit , google web toolkit , ajax javascript ,jquery
1.Periodic Refresh (定时刷新)和 TimeOut 超时
2.利用 javascript Template 实现数据绑定
Unique URL
window.location.hash = newStateInformation;
jTemplates
jquery + asp.net mvc + Repository
AjaxTemplates.UI.Web
AjaxTemplates.Controllers
AjaxTemplates.Model
AjaxTemplates.StubRepository
3.Predictive Fetch(预先获取)
可预测用户最可能马上需要用到的信息并在用户需要使用之前异步获取该信息
12.表示层
1.反转控制
service locator - 详见 Professional Enterprise.Net
ioc容器:
caltle windsor,
spring.net
ninject,
picicontainer.net
unity
structureMap <举例参见作者另一博文>
2.MVP模式
视图控制整个表示层的逻辑流
模型-视图-呈现器
MVP.StubRepository
MVP.Model
MVP.Presentation
MVP.UI.Web
web表单进行asp.net 开发,采用MVP模式 <举例参见作者另一博文>
3.Front Controler模式
MVC模式的核心
控制器与视图完全分离
FrontController.StubRepository
.FrontController.Model
FrontController.Controller
FrontController.UI.Web
命令模式实现
职责链模式实现
4.MVC <举例参见作者另一博文>
控制器处理所有用户交互的请求的最初联络点
asp.net mvc框架
viewmodel --------- 领域实体到ViewModel的映射
利用 autoMapper 映射 viewmodel 实现领域模型到视图模型的映射
5. castle MonoRail
视图是index.vm格式
6. Page Controller模式
web表单模式
13.数据访问层
1.数据访问策略
Repository模式 适合于Domain Model
Data Access Objects模式(DAO模式) 数据库中的每张表创建一个DAO类 比较适合于Transation Script 和Active Record
2.数据访问模式
Unit of Work 模式 能够保持数据完整性
标记接口模式,这个接口充当类和方法的元数据
数据并发控制:
乐观 : 最晚修改生效
悲观 : 1.检索出记录后锁定数据表 2.版本号比较
Lazy Loading 和 Proxy 模式
资源加载工作推迟到真正需要的时候
Identity Map 模式
标识映射
为事务中使用的所有业务对象均保存一个版本, 类似于服务端缓存
Query Object 模式
查询对象,表示采用领域语言编写的查询
与Linq相似
3. 使用对象关系映射器(ORM)
Nhibernate
MS Entity Framework
Linq to sql
14.服务层
1 SOA :
面向服务体系结构是指一组松散集成服务的设计原则和实践,通常针对分布式应用程序
4项原则:
1.边界明确
2.服务自治
3.服务共享数据模式和契约而不是类
4.基于策略确定服务兼容性
2.Messaging模式
1. Document Message 和 Request-Reponse模式
Customer[] FindBy(CustomerSearchRequest request);
public class CustomerSearchRequest
{
public string Country { get; set;}
public string PostalCode { get; set;}
public string Street { get; set;}
}
2. Reservation 模式
预定模式:带一个过期日期
3. Idempotent 模式 (幂等)
指定一个唯一标识号码
3. WCF