Net应用架构设计
N-Tier
是从架构更大的维度上划分,每一个维度都是一个Tier(在微软的ESP2.0里翻译为”级”),比如电商架构划分如下:
- UI
- 服务接口
- 消息、缓存中间件
- 数据库
- ......
Tier与Tier之间通过Tcp/Http通讯,并且每一级都可以独立部署。
N-Layer
相对Tier,Layer是更细粒度的划分,比如服务接口Tier就可以划分为:表示层、业务逻辑层和数据访问层三个Layer。每一个Layer是没有必要独立部署的,否则只会更影响性能。
总结
Tier一般指物理上的分层,Layer是逻辑上的分层。
分层重要思想
职责分离和关注点分离。
架构拆分的常用方法
- 化整为零
- 动静分离
- 按功能拆分
Anemic Domain Model
贫血型领域模型模式,和Domain Model很像,主要区别如下:
- Domain Model的领域类中包含了自身的业务逻辑和数据,以及对象之间的关系
- 贫血型的领域类将与自身相关的业务处理逻辑全部转移到了模型之外--有专门的业务规则类,这使得领域类成为了一个简单的数据对象。
策略模式
把不同的算法和行文分别封装成独立的对象(类),实现统一的策略接口;具体业务依赖于策略接口,从而可以灵活实现算法、行为的切换。主要解决在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护问题。
装饰者模式
核心思想优先采用组合而不是继承。
模板方法
最直接的理解就是“模板”:包括变化和不变化的两个部分,将变化的部分交给子类实现。一个重要的点就是“钩子”函数,一种被声明在抽象类中的方法(空的和默认的实现),可以让子类自己决定对算法的不同点进行挂钩。
策略模式是除了继承之外的一种弹性方案。如果采用继承来定义一个类的行为,我们将会被这个行为困住,甚至修改起来很困难。有了策略模式,就可以通过组合不同的策略对象来改变行为。
服务定义粒度:
- 不要使用泛泛的UpdateCustomerDetails来定义操作,而要用ChangeCustomerAddress、RecordCustomerMarriage之类的有业务意义的名称来定义操作。操作简单、易于理解,从而提高了易用性。
- 如果服务使用的范围有限,如仅仅在企业内部应用集成,则可以选择相对较细粒度的服务接口,为服务请求者提供更多灵活性,如果服务使用的范围扩大,服务的大小也应随之扩大,如企业外部集成
- 多参数时采用结构化,个人认为超过3个时最好用结构化入参。操作灵活,不干扰现有使用者的情况下提供新版本。
预约保留模式
- 发送一个请求给服务器,从服务端的响应中获取一个预约保留的唯一编号(有一定期限,为了避免资源耗费及一些安全性问题)
- 客户端余下的请求中都会带上这个编号,以便服务器把这些请求当成一个事务来处理
等幂模式
- 每一次客户端请求都被赋予了一个唯一的请求标识(生成规则可能是通过这个请求的一些参数做一些算法来生成)
- 服务端在一个存储区域检查这个唯一的标识所代表的请求是否已经被处理过了,是否有对应的响应信息,如果有就从响应存储设备(如数据库、缓存)中返回响应信息,如果没有再次处理这个请求。
Net应用架构设计的更多相关文章
- 浅谈 jQuery 核心架构设计
jQuery对于大家而言并不陌生,因此关于它是什么以及它的作用,在这里我就不多言了,而本篇文章的目的是想通过对源码简单的分析来讨论 jQuery 的核心架构设计,以及jQuery 是如何利用javas ...
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- 解构C#游戏框架uFrame兼谈游戏架构设计
1.概览 uFrame是提供给Unity3D开发者使用的一个框架插件,它本身模仿了MVVM这种架构模式(事实上并不包含Model部分,且多出了Controller部分).因为用于Unity3D,所以它 ...
- VICA 架构设计(1)
本文记录最近完成的一个通用实时通信客户端的架构. 背景 我们公司是做税务相关的软件,有针对大客户 MIS 系统,也有针对中小客户的 SaaS 平台.这些系统虽然都是 B/S 的,但是也需要使用 A ...
- 一种简单的CQRS架构设计及其实现
一.为什么要实践领域驱动? 近一年时间我一直在思考一个问题:"如何设计一个松耦合.高伸缩性.易于维护的架构?".之所以有这样的想法是因为我接触的不少项目都是以数据库脚本来实现业务逻 ...
- 基于token的多平台身份认证架构设计
基于token的多平台身份认证架构设计 1 概述 在存在账号体系的信息系统中,对身份的鉴定是非常重要的事情. 随着移动互联网时代到来,客户端的类型越来越多, 逐渐出现了 一个服务器,N个客户端的格 ...
- 架构设计:一种远程调用服务的设计构思(zookeeper的一种应用实践)
在深入学习zookeeper我想先给大家介绍一个和zookeeper相关的应用实例,我把这个实例命名为远程调用服务.通过对这种应用实例的描述,我们会对zookeeper应用场景会有深入的了解. 远程调 ...
- ABP架构设计交流群-上海线下交流会的内容分享(有高清录像视频的链接)
点这里进入ABP系列文章总目录 ABP架构设计交流群-7月18日上海线下交流会内容分享 因为最近工作特别忙,很久没有更新博客了,真对不起关注我博客和ABP系列文章的朋友! 原计划在7月11日举行的AB ...
- 架构设计:负载均衡层设计方案(3)——Nginx进阶
版权声明:欢迎转载,但是看在我辛勤劳动的份上,请注明来源:http://blog.csdn.net/yinwenjie(未经允许严禁用于商业用途!) 目录(?)[-] Nginx继续进阶 1gzip ...
- 架构设计:负载均衡层设计方案(2)——Nginx安装
来源:http://blog.csdn.net/yinwenjie(未经允许严禁用于商业用途!) 目录(?)[-] Nginx重要算法介绍 1一致性Hash算法 2轮询与加权轮询 Nginx的安装 1 ...
随机推荐
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ...
- cmd隐藏指定文件
隐藏文件: 或者带路径执行: 显示文件:
- Atitit. 图像处理jpg图片的压缩 清理垃圾图片 java版本
Atitit. 图像处理jpg图片的压缩 清理垃圾图片 java版本 1. 清理图片压缩图片尺寸 1 2. 所以要使用ImageWriter 1 3. Thumbnails质量压缩builder.o ...
- mongodb 安装部署说明
mongodb.conf 配置文件 # Where the databases will be stored dbpath=/usr/local/mongodb/mongodb-/data/db # ...
- eclipse中使用weblogic作为服务器控制台中文乱码
使用WebLogic时控制台输出中文乱码解决方法: 1.找到weblogic安装目录,当前项目配置的domain 2.找到bin下的setDomainEnv.cmd文件 3.打开文件,从文 ...
- dedecms使用
使用到了dedecms内容管理系统,遇到两个问题: 1.点击登录后,没有登录进去也没有任何提示,一片空白 解决办法:我是把网站从云主机拷贝下来的,但是忘了云主机上的数据库密码和自己本地的数据库密码不一 ...
- Retrofit--官网2.1.0
Retrofit--官网2.1.0 android Retrofit 介绍 API 描述 请求方法 URL 处理 请求体 表单的 ENCODED 和 MULTIPART HEADER 处理 同步 VS ...
- HTML页面中直接加载其他JSP页面
1.在经典的框架中填充页面时 要填充2处的页面,2处为内容页面,是另外的一个JSP页面 2.左侧页面代码 <%@ page language="java" import=&q ...
- eclipse中根据方法找到其实现类
面向接口编程中,程序全是面向接口变成调用,在维护别人写的系统的时候怎么样快速定位当前根据接口调用的方法是哪个实体类实现的: Ctrl + T/f4(光标放在需要查看的方法上,然后按Ctrl+T或者F4 ...
- eclispe luna 安装subversive和svn connector插件
1. subversive安装 下载地址: http://www.eclipse.org/subversive/latest-releases.php 或者在eclipse luna的marketpl ...