- 浏览: 496217 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 548如果你的应用是通 ... -
NET 应用架构指导 V2 学习笔记(十七) 组件设计指导
2010-06-05 00:48 672组件提供了一种将 ... -
NET 应用架构指导 V2 学习笔记(十八) 表现层组件设计指导
2010-06-05 21:09 528本章讲述的是你在设计用户界面组件和表现层逻辑组件的时候应该 ... -
NET 应用架构指导 V2 学习笔记(十九) 表现层组件设计指导
2010-06-06 06:15 5945 决定数据绑定的 ... -
NET 应用架构指导 V2 学习笔记(二十) 业务组件设计指导
2010-06-07 06:58 616前言 业务组件 ... -
微软企业库5.0学习笔记(四十二)异常处理模块
2010-06-14 00:04 839企业库的异常处理 ... -
关于程序员在30岁、35岁之后怎么办的新思考
2010-06-14 10:40 625首先给大家问个好 ... -
NET 应用架构指导 V2 学习笔记(二十四) 跨层关注问题
2010-06-17 20:00 595概况 大部分的 ... -
微软企业库5.0学习笔记(四十三)数据验证模块
2010-06-19 08:07 998概况 任何接受用户或者是其他系统输入的应用,一定要确保 ... -
关于项目进度慢的思考----如何提高整体开发效率
2010-06-21 23:42 805我们都是软件行业 ... -
微软企业库5.0学习笔记(四十四)实战数据验证模块
2010-06-23 19:22 8421 在业务对象上添加验证 添加对程序集【Microso ... -
微软企业库5.0学习笔记(四十五)实战数据验证模块----高级篇
2010-06-24 19:41 9711、添加自定义的提示信息 验证失败的提示信息可以自定义 ... -
面向对象类设计的五大原则(一)单一职责原则Single Responsibility Principle
2010-06-29 15:45 778引言 面向对象类设计,或者说是面向对象设计,有五大原则 ... -
《深入浅出设计模式-中文版》读书笔记 开篇乱弹(一)
2010-07-01 06:42 650oreilly的《Head.First ... -
《深入浅出设计模式-中文版》读书笔记-继承与组合(三)
2010-07-03 16:53 605经过上一次的改造 ... -
《深入浅出设计模式-中文版》读书笔记-观察者模式(四)
2010-07-06 06:34 635今天要接触的是观 ... -
利用attribute实现简单的ORM
2010-07-09 15:27 683我不知道NH的ORM具 ... -
系统内部模块(子系统)之间的耦合以及模块(子系统)划分
2010-07-14 13:02 807题外话 最近已经在努力学习了,学习基本功,学习设计模式 ... -
《深入浅出设计模式-中文版》读书笔记-工厂模式(五)
2010-07-16 12:46 699今天给大家带来的是:工厂模式。 我们在代码中创建一个对 ... -
Head.First.Object-Oriented.Design.and.Analysis《深入浅出面向对象的分析与设计》读书笔记(一)
2010-07-18 21:47 671题外话 又是一本Head.First系列的书,这个系列 ...
相关推荐
"牛【SystemVerilog】路科验证V2学习笔记(全600页)"是一份详尽的学习资料,涵盖了路科验证方法论的第二版(V2)在SystemVerilog中的应用。 笔记内容可能包含了以下几个关键知识点: 1. **基础语法**:...
SystemVerilog的听课学习笔记,包括讲义截取、知识点记录、注意事项等细节的标注。 目录如下: 第一章 SV环境构建常识 1 1.1 数据类型 1 四、二值逻辑 4 定宽数组 9 foreach 13 动态数组 16 队列 19 ...
SystemVerilog的听课学习笔记,包括讲义截取、知识点记录、注意事项等细节的标注。 目录如下: 第一章 SV环境构建常识 1 1.1 数据类型 1 四、二值逻辑 4 定宽数组 9 foreach 13 动态数组 16 队列 19 关联数组 21 ...
SystemVerilog路科验证V2是一个SystemVerilog的听课学习笔记,包括讲义截取、知识点记录、注意事项等细节的标注,可快速获取自已需要的知识,喜欢的平台可下载试试! 介绍设计描述和验证语言SystemVerilog的基本...
在“AADL学习笔记.docx”文档中,读者可以期待找到对这些概念的详细解释、实例演示以及如何将它们应用到实际项目中的指导。这份笔记对于正在学习AADL或准备采用AADL进行系统设计的人来说是一份宝贵的资源。
《应用架构指南v2》是微软发布的一份深入探讨应用架构的重要文档,旨在为软件开发者、架构师和项目管理者提供一套全面的指导原则和最佳实践。这份指南详细阐述了如何设计、构建和优化应用程序,以确保其高效、可扩展...
微服务和Serverless是当前云计算架构设计中非常热门的概念,它们在解决传统单体应用所面临的可伸缩性、运维复杂性和快速迭代等问题上表现出了明显优势。在王晓波所著的《从微服务到Serverless+架构应用与实践》这份...
"大型金融数据中心网络架构设计V2.pptx" 本资源摘要信息来自一个关于大型金融数据中心网络架构设计的PPT文件,内容涵盖了金融数据中心网络架构设计的演进路线、金融网络应用场景的划分、数据中心应用服务域、双活...
本文将深入探讨“路科验证V2”学习笔记中的关键知识点,主要基于提供的"SV部分讲义"。 一、SystemVerilog基础 1. **数据类型**:SystemVerilog提供了丰富的数据类型,包括位(bit)、逻辑(logic)、整型(int)、...
Kinect V2应用程序兼容x86和x64架构,但不兼容ARM系统,这是开发过程中需要注意的。 综合上述内容,以下是一些Kinect V2学习资料中可能包含的知识点: - 安装Kinect V2驱动程序及其与计算机的连接方法。 - 创建...
整体而言,TCSAE 53-2017标准为V2X通信技术在中国的应用提供了明确的技术指导和实施框架,同时保证了交通安全和效率。这个标准的推广实施,能够帮助业界统一技术标准,为以后进一步研究和开发V2X相关产品奠定坚实的...
旷视科技提出的ShuffleNet V2是一种针对移动端深度学习应用优化的卷积神经网络架构。这种新型架构的提出,旨在解决移动端深度学习领域中计算资源受限和对速度效率需求较高的问题。ShuffleNet V2的设计思想来源于对于...
本研究聚焦于利用第五代移动通信技术(5G)构建的车联网体系架构及其应用。随着信息技术的不断演进,传统的通信网络架构已经无法满足车联网对低延迟、高带宽和高可靠性的需求。因此,研究提出了一种基于5G的智能交通...
通过以上知识点的梳理,可以看出LSD-TEST430F5438-01_V2_1学习板实验指导书覆盖了从硬件资源介绍到软件编程实践的全面内容,旨在帮助学习者深入理解MSP430F5438单片机的各项特性和实际应用,是一份非常实用的学习...
微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于 ...
云平台系统架构设计文档v2.docx云平台系统架构设计文档v2.docx云平台系统架构设计文档v2.docx云平台系统架构设计文档v2.docx云平台系统架构设计文档v2.docx云平台系统架构设计文档v2.docx云平台系统架构设计文档v2....
Nokia的分层参数V2是网络优化中的一个重要概念,主要应用于多层和多频段的网络环境中,目的是为了有效地管理不同层次之间的切换,确保服务质量并优化网络资源的利用。以下将详细介绍Nokia分层参数V2的关键知识点。 ...
中兴物联ME3760_V2公网模块是一种无线通信模块,主要技术参数和机械特性、接口电气特性、射频性能指标等方面进行详细介绍,并提供了模块调试环境的搭建方法和硬件快速上手指导。该文档作为硬件用户指导手册,其内容...
所有 V2X 场景应用都需要依靠 V2X 协议栈进行实现,所有 V2X 相关硬件的性能优势都需要依靠 V2X 协议栈来体现。 V2X 技术市场背景车路协同系统是以路侧系统和车载系统为基础进行构建,通过无线通讯设备实现车、路...