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 ...
随机推荐
- FusionCharts:tooltip分行显示
FusionCharts:tooltip分行显示 tooltip分行显示:如果tooltip过长,可分行显示,在tooltip中增加{br} <chart> <set label=' ...
- STM32关总中断的语句
__set_PRIMASK();//关总中断 /************ **********/ __set_PRIMASK();//开总中断
- jQuery国际化插件 jQuery.i18n.properties 【轻量级】
jQuery.i18n.properties是一款轻量级的jQuery国际化插件,能实现Web前端的国际化. 国际化英文单词为:Internationalization,又称i18n,“i”为单词的第 ...
- Ecmall二次开发-增删改查操作
Ecmall二次开发-增删改查操作 Model目录includes/models 自己添加需要的model class OrdercomplainModel extends BaseModel //类 ...
- 李洪强iOS开发之iOS好文章收集
李洪强iOS开发之iOS好文章收集 该文收集朋友们转发或自己的写的技术文章,如果你也有相关的好文章,欢迎留言,当好文章多的时候,我会对这些好文章进行分门别类 文章 简述 日期 直播服务配置 使用 ng ...
- html-文本处理
文本处理-相关操作: <!-- 申明为html5版本 --> <!DOCTYPE html> <html> <head> <title>文本 ...
- tp框架事务处理
当我们需要同时对多个表进行操作的时候就有必要进行事务处理,首先你的数据库和数据表必须满足事务处理,即表引擎为InnoDB 下面为一个demo //事务:表必须是innodb //删除主表$mod ...
- CCNA2.0笔记_IPv4
ipv4对于OSI是个网络层协议,对于TCP/IP是个Internet层协议 ipv4是一个无连接/尽力传输协议 Ipv4定义了两大类广播地址 1,全向广播:255.255.255.255 2,定向广 ...
- YAML 语法小结
专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便. 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使用空格. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 # 表示注 ...
- 第一百六十二节,jQuery入门介绍
jQuery入门 学习要点: 1.什么是 jQuery 2.学习 jQuery的条件 3.jQuery的版本 4.jQuery的功能和优势 5.其他 JavaScript库 6.是否兼容低版本 I ...