一、问题
1.架构到底是什么?架构和业务之间到底什么关系?
2.好的架构的设计出发点是什么?好的架构应该是什么样的?
作为一个计算机领域的词汇,架构的定义是:有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。
然而业务在不断变化,我们的软件架构也在快速腐化,所以必须要不断的迭代更新,不断适应新的业务需求。一个软件架构的设计主要有三点:
功能需求 + 约束条件 + 性能
约束条件指在什么环境下运行,Linux还是windows,嵌入式还是PC,性能就是安全,并发,响应速度,吞吐量等。
二、软件建模
软件建模就是对一个系统的抽象化,在需求和实现之间架起一座桥梁,通过模型指导一个软件系统的具体实现
三、软件建模方法
在不同的领域和场景下有不同的软件建模方法,其各自的建模思想和采用的建模工具也不尽相同,如:
结构化方法(Structured Method)
面向对象方法(Object Oriented Method)
基于构件方法(Component Based Method)
面向服务方法(Service Oriented Method)
面向切面方法(Aspect Oriented Method)
模型驱动方法(Model Driven Method)
形式化方法(Formal Method)
四、架构分类
逻辑视图:用于描述系统软件功能拆解后的组件关系,组件约束和边界,反映系统整体组成与系统如何构建的过程。关注功能和逻辑层。
开发视图:描述系统的模块划分和组成,以及细化到内部包的组成设计,服务于开发人员,反映系统开发实施过程。
物理视图:描述软件如何映射到硬件,反映系统在分布方面的设计,系统的组件是如何部署到一组可计算机器节点上,用于指导软件系统的部署实施过程。
处理视图:用于描述系统软件组件之间的通信时序,数据的输入输出,反映系统的功能流程与数据流程,通常由时序图和流程图表示。关注进程、线程、对象等运行时概念以及相关的并发、同步、通信等问题。
五、 软件建模工具
随着面向对象技术的不断发展和应用,形成了面向对象的建模标准,即UML统一建模语言。UML是面向对象开发中一种通用的图形化建模语言,具有如下特点:
面向对象:支持面向对象的主要概念,提供了一批基本的模型元素的表示图形和方法,能简洁明了地表达面向对象的各种概念
可视化、表示能力强:通过UML的模型图能够清晰地表示系统的逻辑模型和实现模型,可用于各种复杂系统的建模
独立于过程:是系统建模语言,独立于开发过程
独立于程序语言:用UML建立的软件系统模型可以用Java、C++、Smalltalk等任何一种面向对象的程序设计来实现
易于掌握使用:UML图形结构清晰,建模简洁明了,容易掌握使用
(1)UML的组成:由事物、关系、图三部分组成。
1)事物:结构事物(用例、类、接口、协作、活动类、组件、节点);行为事物(交互、状态机);组织事物(包);辅助事物(注释)
2)关系:关联、依赖、泛化、组合、聚合
3)图:动态图(状态图,顺序图,合作图,活动图);静态图(用例图,类图,对象图,组件图,部署图)
(2)UML的五种视图(对上面九种模型图的实际应用)
【白盒视图】逻辑视图,使用类图和对象图实现
【白盒视图】实现视图,使用组件图实现
【白盒视图】运行视图,使用状态图,顺序图,合作图,活动图实现
【黑盒视图】部署视图,使用部署图实现
【黑盒视图】用例视图,使用用例图实现
(3) UML模型图的五种关系
类的五种关系:泛化=实现>组合>聚合>关联>依赖(耦合度依次减弱,一个类的改变对另一个类影响越大则耦合度越强)
1)泛化: 指的是类之间的继承或者实现关系,继承使用空心三角箭头+实线表示[<|--],实现使用空心三角箭头+虚线表示[<|..],生命周期:在定义类关系时就必须确定,一开始有效
2)组合:表示个体与组成部分之间的关联关系,组成部分是个体不合分割的一部分[*--],使用实心菱形+实线表示,生命周期:在类实例化时有效
3)聚合:表示集体与个体的关联关系,个体独立于集体,使用空心菱形+实线[o--],生命周期:在调用方法调用时有效
4)关联:表示一个类需要依赖另一个类做成员属性的关联关系,使用箭头+实线表示[-->],生命周期:在类的成员变量内有效
5)依赖:表示一个类需要依赖另一个类做方法的返回值、形参、局部变量或者调用另外一个类方法的依赖关系,使用箭头+虚线表示[..>],生命周期:在类的函数调用时有效
(4)应用到具体的软件开发流程
1)需求分析:使用用例视图(用例模型图),去描述外部参与者(角色)对系统功能的建模;分析是否满足客户需求。
2)概要设计:使用逻辑视图(类图、对象图)和行为视图(状态图、活动图、合作图、顺序图),去描述系统的静态结构和动态结构。
3)详细设计:使用逻辑视图(类图、对象图)和行为视图(状态图、活动图、合作图、顺序图),去描述实现系统的静态结构和动态结构方案。
4)编码阶段:将详细设计的静态结构和动态结构方案实现到具体编码中。
5)测试阶段:使用逻辑视图(类图)描述编写单元测试用例,使用实现视图(组件图)和部署视图(部署图)去描述集成测试用例。
参考:
对软件建模的全面认识_huahua.Dr的博客-CSDN博客
【精选】软件建模概述 & UML模型图-CSDN博客
一文了解8种常用的软件架构模式,原理与应用