Skip to content

Commit 491fdcc

Browse files
committed
add notes
1 parent 7e4b687 commit 491fdcc

18 files changed

Lines changed: 1211 additions & 495 deletions

File tree

Architect/1.架构简介.md

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,46 @@
11
1.系统架构
22
===
33

4+
#### 什么是系统架构
5+
6+
关于系统架构,维基百科给出了一个非常好的定义。
7+
A system architecture is the conceptual model that defines the structure, behavior, and more views of a system.[
8+
(系统架构是概念模型,定义了系统的结构、行为和更多的视图)
9+
10+
* 系统架构是一个概念模型。
11+
* 系统架构定义了系统的结构、行为以及更多的视图。
12+
关于这个定义,这里给出了另外一种解读,供大家参考。
13+
* 静。首先,从静止的角度,描述系统如何组成,以及系统的功能在这些组成部分之间是如何划分的。这就是系统的“结构”。一般要描述的是:系统包含哪些子系统,每个子系统有什么功能。在做这些描述时,应感觉自己是一名导游,带着游客在系统的子系统间参观。
14+
* 动。然后,从动态的角度,描述各子系统之间是如何联动的,它们是如何相互配合完成系统预定的任务或流程的。这就是系统的“行为”。在做这个描述时,应感觉自己是一名电影导演,将系统的各种运行情况通过一个个短片展现出来。
15+
* 细。最后,在以上两种描述的基础上,从不通的角度,更详细的刻画出系统的细节和全貌。这就是“更多的视图”。
16+
17+
18+
19+
20+
好代码的特性:
21+
1. 鲁棒(Solid and Robust)
22+
2. 高效(Fast)
23+
3. 简洁(Maintainable and Simple)
24+
4. 简短(Small)
25+
5. 可测试(Testable)
26+
6. 共享(Re-Usable)
27+
7. 可移植(Portable)
28+
8. 可观测(Observvable)/可监控(Monitorable)
29+
9. 可运维(Operational): 可运维重点关注成本、效率和稳定性三个方面
30+
10. 可扩展(Scalable and Extensible)
31+
32+
33+
工程能力的定义:
34+
使用系统化的方法,在保证质量的前提下,更高效率的为客户/用户持续交付有价值的软件或服务的能力。
35+
36+
在《软件开发的201个原则》一书中,将“质量第一”列为全书的第一个原则,可见其重要性。
37+
Edward Yourdon建议,当你被要求加快测试、忽视剩余的少量Bug、在设计或需求达成一致前就开始编码时,要直接说“不”。
38+
开发前期的设计文档、技术评审3天以上100%。代码规范,缺乏认真的代码评审。
39+
降低质量要求,事实上不会降低研发成本,反而会增加整体的研发成本。在研发阶段通过降低质量所“节省”的研发成本,会在软件维护阶段加倍偿还。
40+
41+
在研发前期(需求分析和系统设计)多投入资源,相对于把资源都投入在研发后期(编码、测试等),其收益更大。
42+
43+
444
### 架构三要素
545

646
#### 构件
@@ -27,9 +67,40 @@
2767
系统架构虽然是软件系统的结构,行为,属性的高级抽象,但其根本就是在需求分析的基础行为下,制定技术框架,对需求的技术实现。
2868

2969

70+
### 系统设计的原则和方法:
71+
72+
* 单一目的
73+
* 对外关系清晰
74+
* 重视资源约束
75+
* 根据需求做决策
76+
* 基于模型思考
77+
78+
79+
#### 单一职责原则
80+
81+
82+
83+
#### 开放-封闭原则
84+
无论模块是多么的‘封闭’,都会存在一些无法对之封闭的变化。既然不可能完全封闭,设计人员必须对于他设计的模块应该对哪种变化封闭做出选择。他必须先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化
85+
86+
开放-封闭原则是面向对象设计的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护、可扩展、可复用、灵活性好。开发人员应该仅对程序中呈现出频繁变化的那些部分做出抽象,然而,对于应用程序中的每个部分都刻意地进行抽象同样不是一个好主意。拒绝不成熟的抽象和抽象本身一样重要
87+
88+
89+
#### 依赖倒转原则
90+
91+
92+
93+
#### 迪米特法则
94+
迪米特法则首先强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限,也就是说,一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开
95+
96+
我们在程序设计时,类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。也就是说,信息的隐藏促进了软件的复用。”
97+
98+
99+
100+
101+
30102

31103

32-
33104
---
34105
- 邮箱 :charon.chui@gmail.com
35106
- Good Luck!

Architect/2.UML简介.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,23 @@
22

33
推荐使用[Visual Paradigm](https://www.visual-paradigm.com/cn/),如果是非商业用途可以下载社区版,免费使用
44

5+
6+
7+
![Image](https://raw.githubusercontent.com/CharonChui/Pictures/master/uml_demo.png?raw=true)
8+
9+
10+
类图分三层,第一层显示类的名称,如果是抽象类,则就用斜体显示。第二层是类的特性,通常就是字段和属性。第三层是类的操作,通常是方法或行为。注意前面的符号,‘+’表示public,‘-’表示private,‘#’表示protected。”
11+
12+
继承关系用空心三角形+实线来表示。
13+
接口用空心三角形+虚线来表示。
14+
关联关系用实线箭头来表示。
15+
聚合表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。聚合关系用空心的菱形+实线箭头来表示。
16+
合成(Composition,也有翻译成‘组合’的)是一种强的‘拥有’关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样.合成关系用实心的菱形+实线箭头来表示
17+
依赖关系(Dependency),用虚线箭头来表示。
18+
19+
20+
21+
522
## 类图
623

724
## 时序图

JavaKnowledge/.DS_Store

6 KB
Binary file not shown.

JavaKnowledge/常见算法.md

Lines changed: 0 additions & 117 deletions
This file was deleted.

0 commit comments

Comments
 (0)