- 浏览: 476675 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1028)
- [发布至博客园首页] (826)
- [随笔分类]个人生活随笔 (14)
- [网站分类]首页候选区 (26)
- [网站分类]SharePoint (15)
- [网站分类]其他技术区 (6)
- [随笔分类]批处理技巧 (6)
- [随笔分类].net 2.0 (3)
- [随笔分类]SharePoint2007(MOSS2007) (0)
- [网站分类].NET新手区 (6)
- [网站分类]ASP.NET (6)
- [网站分类]架构设计 (18)
- [网站分类]程序人生 (2)
- [网站分类]SQL Server (2)
- WCF (3)
- 编程技巧 (2)
- 模式架构 (2)
- 分析设计 (4)
- 生活随笔 (0)
- 软件工程 (1)
- Android实例 (2)
最新评论
-
zilong0536:
楼主您好:
请问发表博文支持图片的功能怎么实现啊,一直没有思路 ...
新浪微博开放平台开发-android客户端(3) -
nicegege:
小弟 学习了
帮助中国移动设计10086的排队小模块 -
zl7824516:
用什么技术没说啊
通告(公告),消息(站内短信),提醒的设计:通告 -
virusswb:
源码下载: SinaWeibo2 源码下载之后,将后缀改为ra ...
新浪微博开放平台开发-android客户端(3) -
Jimmyxu0311:
找不到源码下载
新浪微博开放平台开发-android客户端(3)
本章将讨论将逻辑组件分组之后分布在不同的层,这样的一种应用。层集中关注单个逻辑和功能组件,不考虑组件的物理存放位置。逻辑层可以放在不同的物理层,也可以放在同一个物理层。本章将会交给你如何将你的应用分解为不同的逻辑层,如果选择合适的功能布局,应用如何支持多种客户端类型。
分清楚逻辑层和物理层的区别是非常重要的,逻辑层描述的是功能逻辑和组件的分组,物理层描述的是功能和组件在不同机器上的部署分布。尽管每个都包括相同名字的层:表现层、业务层、服务层、数据访问层,但是要记住只有物理层代表物理的分离。在同一个物理层部署多个逻辑层是很常见的。
逻辑层的设计
不管你设计什么类型的应用,是否有用户界面,或者只是一个暴露服务(不要和应用的服务层混为一谈)的服务性应用,你都可以将应用分为不同的逻辑组。这些逻辑组就叫做层。逻辑层帮助区分组件之间的不同类型的任务,使得设计一个可重用的组件变得更加容易。
表现层,业务逻辑层,数据访问层
下图显示了一个简化的,这些逻辑层的高层表现,以及它们之间的关系。
这些逻辑层可以分布在不同的物理层,也可以分布在一个物理层。如果有分开部署的需要,在设计的时候就要考虑这些问题。
在上图中显示了常用的三层:
-
表现层。是一些用户接口,和业务逻辑层进行通信。
-
业务逻辑层。是系统的核心,包装了全部的业务逻辑。
-
数据访问层。主要是对数据源的操作,对上屏蔽了数据源操作的细节。数据库源可能是数据库,也可能是文件,也可能是其他的系统提供的服务。
服务和分层
从高层来看,以服务为基础的解决方案要看成是有很多服务组成,例如彼此之间通过消息来通行。概念上来讲,服务也是方案中的一个组件。但是,在内部,每个服务又是由多个组件组成的。
服务层
如果一个应用必须为其他应用提供服务,或者是支持客户端直接实现功能,常用的方法就是使用一个服务层暴露应用的业务功能。服务层是客户端访问应用的另外一种形式。
在上面的方案中,用户可以通过表现层访问应用,直接和业务层组建进行通信。同时,外部客户端和其他系统也可以通过服务层和系统进行通信。这样就允许应用更好的支持多种客户端类型。
在某些情况,表现层也会通过服务层和业务逻辑层进行通信。当然,这也不是绝对的。如果应用的表现层和业务逻辑层物理部署在同一个物理层,他们就可以直接通信。
分层架构的设计步骤:
当开始设计应用的时候,你首先集中在高层的抽象级别上,通过将功能组分到不同的层开始。接下来要为不同的层定义通信的公共接口,这需要依赖于你正在设计的应用类型。一旦你定义了逻辑层和接口,你一定要决定应用如何部署。最后给层之间的交互选择通信协议。尽管你的结构和接口会演化多次,尤其是你使用敏捷开发,这些步骤保证你在过程的开始考虑了重要的方面。典型的步骤包括:
-
选择分层策略
-
决定你需要的层
-
定义如何分布层和组件
-
确定你是否需要折叠层
-
确定层之间的交互规则
-
确定那些需要跨层的关注点
-
定义层之间的交互接口
-
选择部署策略
-
选择通信协议
1 选择你的分层策略
分层代表将应用的逻辑按照角色和功能分为不同的组件。使用分层的方法可以提高应用的可维护性,在性能需要提高的时候很容易扩展。分组可以有很多的方式。但是,将应用分为太少或者太多的层会增加不必要的复杂性,会降低整体的性能、可维护性、灵活性。决定合适的分层粒度是分层策略的关键的第一步。
你还需要考虑是单纯的逻辑分层,还是有潜在的物理分层存在。跨层会影响本地的性能,尤其是中间有物理层的跨越。但是,增加了应用整体的伸缩性和灵活性。另外,分层利于性能优化,可以优化单个层,而不影响相邻的层。
在分层的情况下,部署在同一物理层上的逻辑层中间的交互和操作是在同一个进程中的,允许你使用高效的通信方式,例如:通过组建接口直接调用方法。但是,为了提高可维护性,确保将来的灵活性,你要小心维护封装和层之间的松散耦合。
逻辑层部署在不同的物理层,相邻逻辑层之间的通信将会发生在网络环境,你要确保你的设计选择了合适的通信方式,考虑到了网络延迟和维护层之间的松散耦合。
考虑你的应用是部署在同一个物理层,还是分离的物理层,在分层策略中也是很重要的。为了保持灵活性,通常要保持层之间的交互是松散耦合的。既保持了部署在同一物理层的时候的高性能,又在需要的时候允许你部署在不同的物理层。
调整分层方法会增加复杂度,可能会增加预先估计的开发时间,但是如果实现的正确,将会很大的提高应用的可维护性、可扩展性、和灵活性。你一定要权衡可重用性和逻辑层之间的松散耦合,相对于带来的复杂性和性能的影响之间的利弊。很小心的考虑如何分层,层之间如何交互,确保在性能和灵活性之间有一个好的平衡。通常来说,通过分层设计,如果可以获得灵活性和可维护性,要比不分层带来的性能提升,更加重要。
2 决定你需要的层
分层有很多的方法。最常用的办法是将应用分为表现层、服务层、业务逻辑层、数据访问层。一些应用可能会引入报表、管理、基础架构层。
对于增加额外的层要特别小心,如果他们对于增加可维护性、扩展性、灵活性没有帮助的话,就不要增加它们。例如:如果你的应用不需要暴露服务,单独的服务层可能就没有必要,你只需要表现层、逻辑层、数据访问层。
3 如何分布逻辑层和组件
你应在需要将层和组件分开部署的时候,才进行分布式部署。实现分布部署的原因通常是安全、物理环境限制、共享逻辑层、和伸缩性。
-
在web应用中,如果你的表现组件以同步的方式访问你的业务组件,可以考虑将业务逻辑层和表现层部署在同一个物理层,以最大化性能,减少操作管理,除非安全需要在他们之间存在一个可信任的边界。
-
在富客户端应用中,UI的处理发生在桌面应用中,出于安全原因,你需要将业务逻辑组件部署在一个单独的物理层。
-
将业务实体和使用它们的代码部署在同一个物理层。意味着会将实体部署在多个地方。
-
考虑将异步实体组件、工作流组件、服务部署在独立的物理层,增加性能和伸缩性。
4 考虑你是否需要折叠层(Collapse Layers)
在某些情况,可能需要松散的层。例如:一个应用的业务规则非常有限,或者是规则主要用来验证数据,可能在一层实现了业务逻辑和表现逻辑。一个从webservice获取数据来显示的应用,可能直接将webservice的引用写在表现层,直接消费webservice的数据。在这种情况,你的逻辑包含了数据访问和表现层。
上面的情况还是少数的。通常的做法是分离功能到不同的层,由一个单独的层作为服务的代理,提供封装之后的数据,而不是提供一大丢功能。分离功能,在后面你可以很容易的扩展它,而不影响其他层。
5 定义层之间的交互
指定交互规则的主要原因是减少依赖和消除循环依赖。例如:如果两层相互依赖于对方,就是一个循环引用。可以参考下面的规则:
Top-Down interaction。高层可以和低层进行交互,但是低层不能访问在它之上的层。这条规则可以帮助你避免循环依赖。你可以通过高层订阅低层的事件来通知高层,低层数据的改变,代替依赖。
限制交互。每一层只能和自己相邻的低层进行交互,每一层只知道自己的下一层。好处就是,对接口的修改只会影响上面的一层。
交互松散。高层可以绕开直接和低层进行交互。可以提高性能,但是会增加依赖。换句话说,修改低层的接口会影响到更多的高层。
6 确定跨层的关注点
在你定义的层之后,一定要确定一下跨层需要关注的地方。包括:日志、缓存、数据验证、用户验证、异常管理。认识这些很重要,为它们设置单独的组件进行管理。提高复用性和维护性。
避免将跨层关注的代码和层功能的代码混合在一起,在逻辑层中需要跨层关注点的时候,只是调用他们的代码就可以了。由于这些功能一定是跨层的,因此需要在每一层部署跨层组件。
有很多方法可以处理跨层关注,微软的模式实践小组的类库AOP可以作为参考。
7 定义层之间的接口
在定义层接口的时候可以参考下面的方法:
-
抽象接口。
-
通用的设计类型
-
依赖反转
-
消息为基础。
8 选择部署策略
9 选择通信协议
未完待续。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
P62
发表评论
-
NET 应用架构指导 V2 学习笔记(十六) 服务层设计指导
2010-06-04 00:13 528如果你的应用是通 ... -
NET 应用架构指导 V2 学习笔记(十七) 组件设计指导
2010-06-05 00:48 630组件提供了一种将 ... -
NET 应用架构指导 V2 学习笔记(十八) 表现层组件设计指导
2010-06-05 21:09 498本章讲述的是你在设计用户界面组件和表现层逻辑组件的时候应该 ... -
NET 应用架构指导 V2 学习笔记(十九) 表现层组件设计指导
2010-06-06 06:15 5655 决定数据绑定的 ... -
NET 应用架构指导 V2 学习笔记(二十) 业务组件设计指导
2010-06-07 06:58 585前言 业务组件 ... -
微软企业库5.0学习笔记(四十二)异常处理模块
2010-06-14 00:04 810企业库的异常处理 ... -
关于程序员在30岁、35岁之后怎么办的新思考
2010-06-14 10:40 599首先给大家问个好 ... -
NET 应用架构指导 V2 学习笔记(二十四) 跨层关注问题
2010-06-17 20:00 557概况 大部分的 ... -
微软企业库5.0学习笔记(四十三)数据验证模块
2010-06-19 08:07 967概况 任何接受用户或者是其他系统输入的应用,一定要确保 ... -
关于项目进度慢的思考----如何提高整体开发效率
2010-06-21 23:42 775我们都是软件行业 ... -
微软企业库5.0学习笔记(四十四)实战数据验证模块
2010-06-23 19:22 8001 在业务对象上添加验证 添加对程序集【Microso ... -
微软企业库5.0学习笔记(四十五)实战数据验证模块----高级篇
2010-06-24 19:41 9541、添加自定义的提示信息 验证失败的提示信息可以自定义 ... -
面向对象类设计的五大原则(一)单一职责原则Single Responsibility Principle
2010-06-29 15:45 741引言 面向对象类设计,或者说是面向对象设计,有五大原则 ... -
《深入浅出设计模式-中文版》读书笔记 开篇乱弹(一)
2010-07-01 06:42 626oreilly的《Head.First ... -
《深入浅出设计模式-中文版》读书笔记-继承与组合(三)
2010-07-03 16:53 582经过上一次的改造 ... -
《深入浅出设计模式-中文版》读书笔记-观察者模式(四)
2010-07-06 06:34 606今天要接触的是观 ... -
利用attribute实现简单的ORM
2010-07-09 15:27 651我不知道NH的ORM具 ... -
系统内部模块(子系统)之间的耦合以及模块(子系统)划分
2010-07-14 13:02 790题外话 最近已经在努力学习了,学习基本功,学习设计模式 ... -
《深入浅出设计模式-中文版》读书笔记-工厂模式(五)
2010-07-16 12:46 673今天给大家带来的是:工厂模式。 我们在代码中创建一个对 ... -
Head.First.Object-Oriented.Design.and.Analysis《深入浅出面向对象的分析与设计》读书笔记(一)
2010-07-18 21:47 642题外话 又是一本Head.First系列的书,这个系列 ...
相关推荐
SystemVerilog的听课学习笔记,包括讲义截取、知识点记录、注意事项等细节的标注。 目录如下: 第一章 SV环境构建常识 1 1.1 数据类型 1 四、二值逻辑 4 定宽数组 9 foreach 13 动态数组 16 队列 19 ...
SystemVerilog的听课学习笔记,包括讲义截取、知识点记录、注意事项等细节的标注。
【SystemVerilog】路科验证V2学习笔记.7z
SystemVerilog路科验证V2是一个SystemVerilog的听课学习笔记,包括讲义截取、知识点记录、注意事项等细节的标注,可快速获取自已需要的知识,喜欢的平台可下载试试! 介绍设计描述和验证语言SystemVerilog的基本...
SystemVerilog的听课学习笔记,包括讲义截取、知识点记录、注意事项等细节的标注。 目录如下: 第一章 SV环境构建常识 1 1.1 数据类型 1 四、二值逻辑 4 定宽数组 9 foreach 13 动态数组 16 队列 19 关联数组 21 ...
Nokia 分层参数V2Nokia 分层参数V2Nokia 分层参数V2Nokia 分层参数V2Nokia 分层参数V2Nokia 分层参数V2Nokia 分层参数V2Nokia 分层参数V2
AADL 学习笔记参考文件 AADL 标准V2
王晓波-从微服务到Serverless+架构应用与实践V2-32页.pdf
王晓波-从微服务到Serverless+架构应用与实践V2.pdf
微服务架构分享V2.pptx
大型金融数据中心网络架构设计V2.pptx
NoSQL数据库技术__城市时空数据引擎JUST的架构与应用实践V2.zip
云平台系统架构设计文档v2.docx云平台系统架构设计文档v2.docx云平台系统架构设计文档v2.docx云平台系统架构设计文档v2.docx云平台系统架构设计文档v2.docx云平台系统架构设计文档v2.docx云平台系统架构设计文档v2....
MTK架构分析v2参考.pdf
大数据时代证券证券交易系统架构演化V2-SACC2021年中国系统架构师大会
参考书,淘宝技术架构介绍,可用于研究学习。
包括了最后的覆盖率内容,word版见另一个文档,但另一个文档没有覆盖率的重点
本报告主要涉及 5G V2X 的典型应用场景。本报告首先对 V2X 技术进行概述,介绍了 3GPP 标准中 C-V2X 的技术演进路线,以及 5G V2X 的 新的技术特点与优势,分阶段介绍了 V2X 业务需求的发展,以及与 V2X 密切相关的...
电子商务CRM业务架构白皮书V2.pdf
KEPServerEX OPC激活指导-V2KEPServerEX OPC激活指导-V2KEPServerEX OPC激活指导-V2KEPServerEX OPC激活指导-V2KEPServerEX OPC激活指导-V2KEPServerEX OPC激活指导-V2KEPServerEX OPC激活指导-V2