Layered Architecture--分层体系结构

分层架构是最常见的架构模式,也被称为n层架构模式。这种模式是绝大多数JAVA EE应用的标准模式,因此被大多数架构师,设计师和开发者所熟悉。分层架构紧密联系着传统IT通信和多数公司的组织结构。分层因此成为多数商业应用开发的一个自然选择。


模式描述


分层架构模式中的组件被组织成水平层,每个层执行应用中的一个具体角色(比如,表示逻辑或业务逻辑)。尽管分层架构模式不会具体要求模式中必须存在的层的数目和类型,但大多数分层架构由四个标准层:表示(presentation),业务(business),持久(persistence)和数据库(database),如下图所示。


在一些情况下,业务层和持久层结合成一个单一的业务层,特别是在持久逻辑(比如,SQL或HSQL)嵌入到业务层组件的时候。因此,小一些的应用有可能只有三个层次,而大一些或者更复杂的商业应用会有五个以上的层次。


层次架构模式的每层有一个具体角色和职责。比如,一个表示层用于处理所有用户接口和浏览通信逻辑,而一个业务层会用于执行具体的和要求(request)相关的业务规则。架构的每个层会形成满足具体业务要求的一个抽象。举个例子,表示层不必知道或不必关心如何得到用户的数据,而只需要以特定的格式展示屏幕上的信息。同样地,业务层不必关心如何格式化用户数据来展示在屏幕上,甚至用户数据从哪里来;只需从持久层获得数据,用业务逻辑处理数据(比如,计算值或聚集数据),最后把信息传到表示层。


分层架构模式最重要的特性之一就是组件的关注分离(separation of concerns)。一个层中的组件只处理和该层相关的逻辑。比如,表示层中的组件只处理表示逻辑,而业务层中的组件只处理业务逻辑。这种组件分类使构建有效角色和职责模型变得容易,也有益于开发,测试,掌控和维护,这是因为这个架构有着定义明确的组件接口和限制的组件视野。


关键概念


注意下图中的架构中每个层都被标记为关闭着的(closed)。这是层次架构模式中非常重要的概念。一个关闭着的层意味着当一个请求从一个层移动到另一个层,它必须首先到移动到一个层的下层,然后继续移动。举个例子,一个请求从表示层开始在到数据库层之前必须先移动到业务层,然后到持久层。



那为什么不允许表示层直接访问表示层或数据库层呢?毕竟,直接的数据库访问会比经过一些没有必要的层快很多。问题的答案隐藏在一个重要的概念中,叫做层次隔离


层次隔离概念意味着架构中一个层的改变通常不会影响其他层的组件:改变被隔离在一个层的组件中,也许会影响另一个相关的层(比如包含SQL的持久层)。如果你允许表示层直接访问持久层,那么持久层中对SQL的改变会影响业务层和表示层,因此会产生一个组件相互依赖的耦合紧密的应用。这种架构会非常难于改变。


层次的隔离概念也意味着每个层独立于其他层,因此不需要知道其他层的内部工作机理。为了理解这个概念的重要性,考虑一个大型的重构工作,该工作是转变表示框架从JSP(Java Server Pages) 到JSF(Java Server Faces)。假如表示层和业务层用的合同保持一样,那么业务层没有被重构影响,仍杨保持完全独立于表示层所用的用户界面框架的类型。


尽管关闭着的层有助于层次的隔离因而有助于隔离架构中的改变,仍然会有某些层保持开放(open)的特例。假如你想增加

LayeredForm : 支持窗体动画特效,透明,可以和LayeredControl实现任意透明效果等。。。包含LayeredWindowForm的功能 支持一部分带有Paint事件的普通控件,但是不能实现普通控件的背景透明效果! 控件类:Controls HotKey:支持全局热键绑定,事件驱动,可以开启和关闭 LayeredButton:按钮控件,支持按钮颜色设置,图片按钮,如果只设置一张正常状态下的按钮图片,则有鼠标移入加亮效果和鼠标按下变暗效果。边框设置,文字效果设置。 LayeredCheckButton:对LayeredButton的扩展,支持状态切换。 LayeredDragBar:支持对父容器的尺寸拖拽调整 LayeredFlashBox:支持透明Flash播放(当前版本不可用,请勿使用!) LayeredLabel:对文字的显示,文字效果设置 LayeredListBox:支自定义列表项目,支持横向和纵向滚动,支持平滑滚动。 LayeredPanel:在Layered模式下的容器控件 LayeredPictureBox:支持Gif播放,支持多张图片合成动画播放。播放Gif时候不要频繁暂停和播放动画,容易导致线程阻塞。 LayeredTextBox:Layered模式下的文本编辑器。支持水印文字设置 LayeredTrackBar:进度条控件,支持图片进度条定义 动画类:Animations 通过设置LayeredForm的Animation.Effect属性来定义窗体动画特效。 包含了以下特效类:BlindWindowEffect、FadeinFadeoutEffect、GradualCurtainEffect、LevelScrollEffect、RandomCurtainEffect、RotateZoomEffect、ThreeDTurn、ZoomEffect 可以通过实现IEffects接口来实现自定义特效 DirectUI类:DirectUI 包含几个DirectUI控件。用于对以上控件的扩展和美化。部分LayeredControl包含DUIControl属性可以向其添加DirectUI控件。支持通过集合编辑器里面添加,只是不能在集合编辑器里面绑定事件,需要手动写代码绑定。通过集合编辑器添加的控件不一定能马上在设计器里看到效果,因为会有图像缓存,可能需要尝试调整控件大小等方式强制控件重绘,就可以看到效果了。 LayeredControl可以支持在普通窗体上使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值