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 ...
随机推荐
- unity, unity中GL.MultMatrix的一个超级bug
GL.MultMatrix与OpenGL固定管线的glMultMatrix函数行为并不一致,不是累乘,而是覆盖. 例如下面例子,本来预期是在(100,100)处画一个方块,而实际效果却是在(0,0)处 ...
- 关于阿里云ECS Centos 5/6/7 Linux Glibc库严重安全漏洞修复方法
日前Linux GNU glibc标准库的 gethostbyname函数爆出缓冲区溢出漏洞,漏洞编号为CVE-2015-0235.黑客可以通过gethostbyname系列函数实现远程代码执行,获取 ...
- UVA812-Trade on Verweggistan(暴力)
题目链接 题意:商人要去买pruls这样的东西.然后它的价值是一个序列,买的时候要严格从头到尾取,比方你要买第5个,那么前4个也要一起买下来,求商人能获得的最大的利润. 思路:最大利润肯定就是每一个序 ...
- Nginx日志过滤 使用ngx_log_if不记录特定日志
ngx_log_if是Nginx的一个第三方模块.它在Github上的描述是这样介绍的:ngx_log_if是一个独立的模块,允许您控制不要写的访问日志,类似于Apache的"CustomL ...
- 点击按钮,实现两个td值互换
<body> <table id="table1"> <tr> <td>第一个单元格</td> <td>第二 ...
- ORACLE 中 TRANSLATE的用法
--TRANSLATE(string,from_str,to_str) --to_str和from_str中的字符一一对应 --如果string里有,from_str字符集里没有的字符,将保留 --如 ...
- [转]Python定时任务框架APScheduler
APScheduler是基于Quartz的 一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便.提供了基于日期.固定时间间隔以及crontab类型的任务,并且可以 持久化任务 ...
- Java动态代理原理及其简单应用
概念 代理对象和被代理对象一般实现相同的接口,调用者与代理对象进行交互.代理的存在对于调用者来说是透明的,调用者看到的只是接口.代理对象则可以封装一些内部的处理逻辑,如访问控制.远程通信.日志.缓存等 ...
- Mock数据使用的Util
package com.xxx.common.util; import java.lang.reflect.Field; import java.lang.reflect.Method; import ...
- JQ实现吸顶效果代码
吸顶下过代码跟简单几行代码就可以了 如果滚动的军力大于100,就改变导航的定位方式,否则就默认 $(function(){ $(window).scroll(function(){ ...