软件架构设计(2)——子系统、框架与架构
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
结论
框架的智慧在于:为了追求重用所带来的价值量最大化,
将容易变化的部分封装成扩展点,并辅以回调机制将它 们纳入框架的控制范围之内,从而在兼顾定制开销的同 时,使被重用的设计成果最多。
软件架构设计是跨越现实世界与计算机世界之间鸿沟
的桥梁。
软件架构设计完成了面向业务到面向技术的转换。 软件架构设计是针对需求所做的包含结构、协作、技
“好的架构必须使每个关注点相互分离,也就是说 系统中的一部分发生了改变,不会影响其他部分。即 使需要改变,也能够清晰地识别出哪些部分需要改变。 如果需要扩展架构,影响将会最小化。” ——Ivar Jacobson《AOSD》
职责
子系统 粒 度 模块
类
特 定 应 用 部 分
领 域 通 用 部 分
struct employee { int employee_num; char employee_name[100]; …… } empoyees[100];
int cmp (const void *a, const void *b) { struct empoyee *c = (empoyee *)a; struct empoyee *d = (empoyee *)b; return (c->employee_num) – (d->employee_num); } qsort (empoyees, 100, sizeof(empoyees[0]), cmp);
扩展一:对int型数据排序
int num[100]; int cmp (const void *i, const void *j) { return *(int *)i - *(int *)j; } qsort (num, 100, sizeof(num[0]), cmp);
扩展二:对结构体数据排序
扩展点实现机制
函数指针 抽象方法/虚函数 约定数据格式
开发手段
函数指针作参数 接口/抽象基类 提供特定格式的数据
扩展点实现举例
函数原型
void qsort ( void *base, size_t num, size_t width, int (*compare)(const void *elem1, const void *elem2) );
1、框架是半成品 2、框架体现了架构 3、框架的价值在于重用 4、框架定义了可调整点,即扩展点
结论:
框架和架构的区别
框架是软件,架构不是软件!
框架和架构的联系
先规划抽象解决方案 起点 架构
框架 再实现特定部分
最终完整 解决方案
结论
先大局后局部,就出现了架构
先通用后专用,就出现了框架
框架vs.类库
应用
框架
Baidu Nhomakorabea
类库
框架是一种介于类库和应用系统之间的概念
框架vs.类库
应用 应用
E A
C D
B A D
类库
组件A 组件B 组件C 组件D 组件E 组件F 组件A 组件B 组件C
应用框架
组件D 组件E 组件F
框架的分类
Struts Eclipse MFC
技 术 通 用 部 分
软件架构设计就是将系统按照“系统—子系统—模
块—类”层层分解的过程。 子系统如果足够复杂,也需要有架构设计。 子系统不同,架构也不同。 子系统划分的粒度具有相对性。
“框架是一个可实例化的、部分完成的软件系统或 子系统,它为一组系统或子系统定义了架构,并提供 了构造系统的基本构造块,还未实现特定功能定义了 可调整点。” ——《面向模式的软件体系结构(第一卷)》
MOM ORB类 应用框架 白盒框架
扩展点
中间件框架
框架
黑盒框架
接口
ACE
基础设施框架 技术框架 (水平框架) Hibernate (ORM) 业务框架 (垂直框架) Willow SugarCRM
灰盒框架
白+黑
如何实现框架中的扩展点
技术分类
面向过程编程语言 面向对象编程语言 其他技术(与语言无关)
术等方面的重要决策,为系统化的开发活动建立了基 础。
软件架构设计对后期的软件维护和升级降低了成本,
提供了便利。