UML:用例图,类图,对象图,活动图,序列图,状态图,组件图,部署图
业务用例,系统用例
ADMEMS架构体系五个视图:(前3个软件架构,后2个系统架构)
逻辑架构,关注功能需求,划分子系统,划分模块。用例图,流程图
开发架构,关注代码层次结构,程序包,sdk,第三方库,中间件等
运行架构,关注并发,同步,死锁等
物理架构,关注部署,网络结构,服务器等基础设施
数据架构,关注数据持久化,存储。分布式,复制,同步等问题
TOGAF架构体系:业务架构、数据架构、应用架构、技术架构
五视图法做架构设计的步骤是逻辑架构->数据架构->开发架构->运行架构->物理架构。用例图->流程图->领域建模->ER图->微服务->技术栈->并发->部署
领域建模方法:用例分析法,四色建模法,事件风暴法
用例分析法:找名词,加属性,连关系
a.概念分类列表:人、事物、地点、组织、概念、事件、规则、抽象名词、交易项目、角色、设备、组织结构(对用例进行识别:实体、过程中的信息、角色的输入输出、操作设备等)
b.名词分析法:识别问题域和用例描述中的名词和名词性短语作为候选的概念类和属性,从候选项中,摒弃多余的名词,确定最终的对象(注意是作为类还是属性,类可以是一种标识、状态和行为)
四色模型
- moment-interval(时标性原型):时标性原型是建模的起点,它代表着我们需要记录的,某一时刻发生的事件。例如订单,行程,会议。
- party, place, or thing(人-事-物原型):一种有形的,可唯一识别的实体。可以是人、机构、地点、物品等。
- role (角色原型):角色是party, place, or thing的一种参与方式。例如,在一份雇佣关系中,某个人扮演者雇员的角色。那么这个人就是”party, place, or thing”,雇员就是”role”。
- description(描述原型):表示资料类型的资源,是一种类似目录条目的描述,用来对对象进行分类或标记,可以被其它原型反复使用。例如,一个商品的品牌、描述属性。
事件风暴
识别领域事件,按时间顺序,名词
识别领域命令,动词
寻找聚合,归类
领域边界确认
数据库设计充血模型c++和贫血模型java
自顶向下,自底向上
水平拆分,垂直拆分
宗旨:层次清晰,可维护,可复用,可扩展
模式:企业架构模式,设计模式,SOA模式,企业集成模式
SOLID设计原则
二 数据架构1 ER图
矩形标识实体,相当与类图的类。椭圆标识实体的属性,下划线表示主键。菱形表示关系。1:N表示约束。双矩形表示弱实体,必须依赖其他实体才能存在。
3范式
1NF 第一范式是指数据库的每一列都是不可分割的基本数据项,强调列的原子性。下图不符合1NF
2NF 第二范式要求数据表每一个实例或者行必须被唯一标识。除满足第一范式外还有两个条件,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。
3NF 若某一范式是第二范式,且每一个非主属性都不传递依赖于该范式的候选键,则称为第三范式,即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。
三 技术选型计算密集型任务的特点是要进行大量的计算,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等,全靠CPU的运算能力。这种计算密集型任务虽然也可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,所以,要最高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核心数。计算密集型任务由于主要消耗CPU资源,因此,代码运行效率至关重要。Python这样的脚本语言运行效率很低,完全不适合计算密集型任务。对于计算密集型任务,最好用C语言编写。
IO密集型,涉及到网络、磁盘IO的任务都是IO密集型任务,这类任务的特点是CPU消耗很少,任务的大部分时间都在等待IO操作完成(因为IO的速度远远低于CPU和内存的速度)。对于IO密集型任务,任务越多,CPU效率越高,但也有一个限度。常见的大部分任务都是IO密集型任务,比如Web应用。IO密集型任务执行期间,99%的时间都花在IO上,花在CPU上的时间很少,因此,用运行速度极快的C语言替换用Python这样运行速度极低的脚本语言,完全无法提升运行效率。对于IO密集型任务,最合适的语言就是开发效率最高(代码量最少)的语言,脚本语言是首选,C语言最差。
全栈开发语言:js可开发前端,移动端RN,桌面端electron,后端nodejs
python可开发桌面应用(PyQt、wxPython等),使用 kivy 开发安卓 APP,服务端(twisted等),web端(Django、Flask等),爬虫(pyspider等),硬件stm32(PyBoard等)
四 实例用例分析实例
找名词
who : 学员、讲师、管理员
用例:
1. 管理员 创建了 北京 和 上海 两个校区
2. 管理员 创建了 Linux Python Go 3个课程
3. 管理员 创建了 北京校区的Python 16期, Go开发第一期,和上海校区的Linux 36期 班级
4. 管理员 创建了 北京校区的 学员 小晴 ,并将其 分配 在了 班级 python 16期
5. 管理员 创建了 讲师 Alex , 并将其分配 给了 班级 python 16期 和全栈脱产5期
6. 讲师 Alex 创建 了一条 python 16期的 上课纪录 Day6
7. 讲师 Alex 为Day6这节课 所有的学员 批了作业 ,小晴得了A, 李磊得了C-, 严帅得了B
8. 学员小晴 在 python 16 的 day6里 提交了作业
9. 学员李磊 查看了自己所报的所有课程
10 学员 李磊 在 查看了 自己在 py16期 的 成绩列表 ,然后自杀了
11. 学员小晴 跟 讲师 Alex 表白了
名词列表:
管理员、校区、课程、班级、上课纪录、作业、成绩、讲师、学员
加属性
连关系
有了类,也有了属性,接下来自然就是找出它们的关系了。
事件风暴建模实例
具有业务意义,过去式,持续性
命令是产生领域事件的,就是一个动作



