[笔记]软件体系结构(2)--分层

分层是大家耳熟能详的体系结构模式,如ISO7层模型、Struts的MVC,Web项目常用的运行视图分层表现层/业务层/数据访问层。
可能概念/原则上比较好理解,网络上比较完整的讲解极少。整理完一遍,对分层的理解更清晰了:在怎样的场景需要考虑分层,分层的具体方式(经常遗漏的重复考虑分层、错误处理),在分层过程中对其优势点的平衡等

【概述】
层的应用背景: 有助于构建能够被分解成子任务组的应用系统,其中每个子任务组处于1个特定的抽象层次
与单块协议相比,分层方法被视为更好的实践,支持分工(效率)、单个部件方案替换

【原则】
  • 层与层之前使用接口交互,保持稳定
  • 每层是可替换的,其变化不影响整体系统(即影响限制在层组件内)
  • 层,松耦合,高内聚。不同层提供的功能不重叠
  • 不跨层访问:自顶向下的消息和控制流称之“请求”(1->N低层请求,推模式),自底向上调用可以称为“通知”(N低层 ->压缩1个更高结构通知)   (为什么?可维护性:可替换性、AOP支持)

【细节】
例子 -- ISO7层模型
语境 -- 一个需要被分解的大系统
问题 -- 系统混合低层高层问题,往往需要一个与其垂直子划分正交的水平构建,使几个独立操作处于同一抽象层
需要平衡的强制条件有:
变更影响可控、接口稳定、组件可替换、低层重用度(在其他系统)、分工效率。 “考虑到一般变更的设计是优秀系统深化的一个主要助推器”
解决方案/ 结构 -- 自顶向下 N~1
动态特性 -- 自顶向下请求,自底向上通知(如设备驱动探测输入)、被满足即止而非要全层访问
实现 -- 
1、为把任务分组成层而定义抽象准则
2、根据抽象准则定义抽象层数
3、给每个层命名并指定其任务
4、指定服务:层间共享模块放松了严格 分层的原则
5、细化分层:重复1~4步骤,进化到自然/稳定分层
6、为每层指定一个接口
7、构建独立层:
8、指定相邻层间的通信:推/拉
9、分离邻接层:
   单路耦合
   自底向上通信,也可使用回调函数且保留自顶向下单路耦合,高层要注册低层的回调函数,从低层发往高层的可能事件集固定时,这种方式特别有效。反应器模式、命令模式
10、设计一种错误处理策略:尽可能在最低层处理错误,至少将相似错误类型归类,并仅传播这些更一般的错误

已解决的例子 -- TCP/IP协议
变体 -- 
松散分层系统:每个层可以使用比它低的所有层的服务。 灵活性/性能的增加是对可维护性丧失的回报。常用于基础结构系统,如Unix操作系统,修改较少,性能更重要
通过继承分层:面向对象,耦合不利可维护性
已知使用--虚拟机(Run Every Where)etc
效果 --
优点:重用、标准化支持、局部依赖性(可测试性)、可替换性/移植、分工/变更效率
不足:更改行为的重叠、降低效率(如可直接从N-1中间其他透传层)、层的正确粒度(层少优势不能发挥,层多有冗余/性能开销)


你可能感兴趣的:(架构)