软件工程design
软件design is 软件工程 core环节, 它 is 将requirements转化 for 可执行code 桥梁. 良 good 软件design可以improving软件 quality, 可maintenance性 and 可scale性, 降 low Development and maintenance成本. 本章将介绍软件design basicconcepts, 软件architecturedesign and 详细design principles and method, 以及常用 design模式 and tool.
1. 软件designoverview
软件design is 指根据requirements规约documentation, design软件system structure, component, interface and implementation细节 过程. 它 is Software Development过程in important 环节, 位于requirementsanalysis and 编码之间.
1.1 软件design 层次
软件design通常分 for 以 under 几个层次:
- architecturedesign: 也称 for high 层design, 关注软件system 整体structure, component划分, component之间 relationships and 交互方式.
- 详细design: 也称 for low 层design, 关注各个component in 部implementation细节, such asalgorithms选择, datastructuredesign, interfacedesignetc..
- interfacedesign: 关注component之间 interface定义, including输入输出parameter, return value, exceptionprocessingetc..
1.2 软件design principles
软件design coreprinciples
- abstraction: 关注system 本质特征, ignore次要细节.
- module化: 将system分解 for 相互独立, functions单一 module.
- information隐藏: 将module in 部implementation细节隐藏起来, 只暴露必要 interface.
- 关注点分离: 将不同 关注点分开processing, such as业务逻辑, data访问, user界面etc..
- high in 聚 low 耦合: module in 部 元素应该 high 度相关 ( high in 聚) , module之间 依赖relationships应该尽可能 few ( low 耦合) .
- 可scale性: system应该易于scale and modify, 以适应requirements 变化.
- reusability: design应该考虑component reusability, reducing重复code.
1.3 软件design 过程
软件design 过程通常including以 under 步骤:
- requirementsanalysisunderstanding: 深入understandingrequirements规约documentation, 确保design符合requirements.
- architecturedesign: design软件system 整体structure and component划分.
- 详细design: design各个component in 部implementation细节.
- interfacedesign: designcomponent之间 interface.
- designreview: 由专家 and 相关方 for designforreview, 确保design 正确性 and integrity.
- designmodify: 根据review反馈, modify and 完善design.
2. 软件architecturedesign
软件architecturedesign is 软件design important 组成部分, 它关注软件system 整体structure, component划分, component之间 relationships and 交互方式. 良 good architecturedesign可以improving软件 quality, 可maintenance性 and 可scale性.
2.1 architecturedesign concepts
软件architecture is 指软件system basicstructure, includingsystem component, component之间 relationships, component interface and 交互方式, 以及指导systemdesign and 演化 principles and 约束.
2.2 common architecture模式
architecture模式 is in specific场景 under , 经过verification , reusable 软件architecturedesignsolutions. common architecture模式including:
2.2.1 分层architecture
分层architecture is a将system分 for many 个层次 architecture模式, 每个层次负责specific functions, 层次之间throughinterfacefor通信.
- 表示层: 负责user界面 展示 and user交互.
- 业务逻辑层: 负责processing业务逻辑.
- data访问层: 负责 and datalibrary 交互.
- data持久层: 负责data store and retrieve.
2.2.2 客户端-serverarchitecture
客户端-serverarchitecture is a将system分 for 客户端 and server两部分 architecture模式, 客户端负责user界面 and 部分业务逻辑, server负责datastore and core业务逻辑.
2.2.3 微servicearchitecture
微servicearchitecture is a将system分解 for many 个独立service architecture模式, 每个service负责specific 业务functions, service之间throughAPIfor通信.
2.2.4 event驱动architecture
event驱动architecture is a基于event architecture模式, componentthroughrelease and subscribeeventfor通信, 而不 is 直接调用 for 方 method.
2.2.5 管道-filter器architecture
管道-filter器architecture is a将system分 for many 个filter器 and 管道 architecture模式, datathrough管道 in filter器之间流动, 每个filter器 for dataforspecific processing.
2.3 architecturedesign method
常用 architecturedesignmethodincluding:
- 自 on 而 under method: from system 整体requirements出发, 逐步分解 for 子system and component.
- 自 under 而 on method: from 具体 component and module出发, 逐步组合 for 完整 system.
- in间向 out method: from system corecomponent出发, 逐步scale to othercomponent.
- 模式驱动method: using已 has architecture模式 and design模式来指导architecturedesign.
2.4 architecturedesign tool
常用 architecturedesigntoolincluding:
- UMLtool: such asEnterprise Architect, StarUMLetc., 用于creationarchitecturegraph and designdocumentation.
- architecturedescribeslanguage (ADL) : such asACME, xADLetc., 用于形式化describes软件architecture.
- codeanalysistool: such asSonarQube, CheckStyleetc., 用于analysiscode architecturequality.
3. 详细design
详细design is 软件design important 组成部分, 它关注各个component in 部implementation细节, such asalgorithms选择, datastructuredesign, interfacedesignetc.. 良 good 详细design可以improvingcode quality, 可maintenance性 and readable 性.
3.1 详细design in 容
详细design通常including以 under in 容:
- datastructuredesign: designsysteminusing datastructure, such asclass, structure体, 枚举etc..
- algorithmsdesign: designsysteminusing algorithms, such assort, 搜索, encryptionetc..
- interfacedesign: designcomponent之间 interface, including输入输出parameter, return value, exceptionprocessingetc..
- 流程design: designsystem 业务流程 and 控制流程, such as流程graph, statusgraphetc..
- module in 部design: design各个module in 部implementation细节, such asfunction划分, variable定义etc..
3.2 详细design method
常用 详细designmethodincluding:
- structure化designmethod: using流程graph, N-Sgraph, PADgraphetc.toolfordesign.
- 面向objectdesignmethod: usingclassgraph, 时序graph, 活动graphetc.UMLtoolfordesign.
- 伪codedesignmethod: using伪codedescribesalgorithms and 流程.
- 原型designmethod: throughcreation原型来verificationdesign 正确性 and 可行性.
3.3 详细design tool
常用 详细designtoolincluding:
- UMLtool: such asEnterprise Architect, StarUMLetc., 用于creation详细designgraph.
- 流程graphtool: such asVisio, Draw.ioetc., 用于creation流程graph.
- code生成tool: such asCodeSmith, MyGenerationetc., 用于根据design生成codeframework.
4. design模式
design模式 is in specific场景 under , 经过verification , reusable designsolutions. 它 is 软件designexperience summarized, 可以helpingDevelopment者解决common designissues, improvingcode quality and 可maintenance性.
4.1 Design Patterns Classification
根据用途, design模式可以分 for 以 under 几class:
| class别 | describes | example |
|---|---|---|
| creation型模式 | 关注object creation过程 | singleton pattern, factory pattern, abstractionfactory pattern, Builder Pattern, Prototype Pattern |
| structure型模式 | 关注object and class 组合 | adapter pattern, Bridge Pattern, decorator pattern, Composite Pattern, out 观模式, Flyweight Pattern, proxy模式 |
| behavior型模式 | 关注object之间 通信 | strategy pattern, 模板method模式, observer pattern, iterators模式, Chain of Responsibility Pattern, commands模式, Memento Pattern, status模式, Visitor Pattern, in介者模式, Interpreter Pattern |
4.2 常用 design模式
4.2.1 singleton pattern
singleton pattern确保一个class只 has 一个instance, 并providing一个全局访问点.
// singleton patternexample (Java)
public class Singleton {
private static Singleton instance;
private Singleton() {
// 私 has constructmethod
}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
4.2.2 factory pattern
factory pattern定义一个creationobject interface, 但让子class决定要instance化 class is 哪一个.
4.2.3 adapter pattern
adapter pattern将一个class interface转换成客户希望 另一个interface, 使得原本由于interface不兼容而不能一起工作 class可以一起工作.
4.2.4 observer pattern
observer pattern定义了object之间 一 for many 依赖relationships, 当一个objectstatus发生变化时, 所 has 依赖它 object都会得 to notification并自动update.
4.2.5 strategy pattern
strategy pattern定义了一系列algorithms, 并将每个algorithmsencapsulation起来, 使它们可以互相replace.
5. 软件designdocumentation
软件designdocumentation is 记录软件design过程 and 结果 documentation, 它 is Software Development important 依据, 也 is 软件maintenance important reference.
5.1 architecturedesigndocumentation
architecturedesigndocumentation通常including以 under in 容:
- 引言: includingdocumentation 目 , 范围, 术语定义etc..
- architectureoverview: describessystem 整体architecture and designprinciples.
- componentdescribes: 详细describes各个component functions, 职责 and interface.
- component交互: describescomponent之间 交互方式 and data流.
- architecture决策: 记录 important architecture决策 and 理由.
- architecturerisk: 识别可能 architecturerisk and 缓解措施.
5.2 详细designdocumentation
详细designdocumentation通常including以 under in 容:
- 引言: includingdocumentation 目 , 范围, 术语定义etc..
- moduledescribes: 详细describes各个module functions, 职责 and interface.
- datastructuredesign: describessysteminusing datastructure.
- algorithmsdesign: describessysteminusing algorithms.
- 流程design: describessystem 业务流程 and 控制流程.
- interfacedesign: 详细describescomponent之间 interface.
实践case: 电商平台 软件design
case背景
某电商公司计划Development一个 new 电商平台, 该平台需要support商品展示, 购物车, 订单management, 支付etc.functions. 公司 design团队负责该project 软件design工作.
软件design过程
1. architecturedesign
- architecture模式选择: 选择分层architecture模式, 将system分 for 表示层, 业务逻辑层, data访问层 and data持久层.
- component划分: 将system划分 for usermanagement, 商品management, 购物车, 订单management, 支付etc.component.
- techniques选型: 选择Spring Bootserving as after 端framework, Reactserving as before 端framework, MySQLserving asdatalibrary.
- architecturegraph绘制: usingUMLtool绘制systemarchitecturegraph, describes各个component之间 relationships and 交互方式.
2. 详细design
- datastructuredesign: designuser, 商品, 购物车, 订单etc.datastructure, includingclass property, method and relationships.
- algorithmsdesign: design商品推荐, 订单processing, 支付流程etc.algorithms.
- interfacedesign: design各个component之间 interface, includingRESTful API 定义.
- 流程design: using流程graphdescribesuserregister, 商品购买, 订单processingetc.流程.
3. design模式application
- singleton pattern: 用于datalibrary连接池, logmanagement器etc.需要全局唯一instance 场景.
- factory pattern: 用于creation不同class型 支付processing器, 物流serviceetc..
- strategy pattern: 用于implementation不同 商品推荐algorithms, 促销策略etc..
- observer pattern: 用于implementation订单status变化时 notificationmechanism.
4. designdocumentationwriting
- architecturedesigndocumentation: writing详细 architecturedesigndocumentation, includingarchitectureoverview, componentdescribes, component交互etc..
- 详细designdocumentation: writing详细 详细designdocumentation, includingmoduledescribes, datastructuredesign, algorithmsdesignetc..
- interfacedesigndocumentation: writing详细 interfacedesigndocumentation, includingRESTful API 定义, parameter说明etc..
case效果
throughsystem化 软件design过程, 该电商平台project取得了以 under 成果:
- architecture清晰: systemarchitecture清晰, component划分合理, 便于understanding and maintenance.
- design合理: 详细design合理, algorithms选择得当, interface定义清晰.
- codequality high : 由于design良 good , 编码阶段 codequality较 high , reducing了bug 产生.
- Developmentefficiency high : 由于designdocumentation详细, Development团队可以 fast 速understandingrequirements and design, improving了Developmentefficiency.
- 可maintenance性强: 由于adopts了module化design and design模式, system 可maintenance性 and 可scale性较强.
互动练习
练习1: architecturedesign
请 for 一个 in 线graph书馆systemdesignarchitecture, including:
- 选择合适 architecture模式
- 划分systemcomponent
- describescomponent之间 relationships and 交互方式
练习2: design模式application
请 for 以 under 场景选择合适 design模式, 并说明理由:
- 需要确保一个class只 has 一个instance
- 需要根据不同 条件creation不同class型 object
- 需要 in 不modify原 has code circumstances under 添加 new functions
- 需要 in objectstatus变化时notificationotherobject
练习3: 详细design
请 for 一个userloginfunctionsfor详细design, including:
- datastructuredesign
- algorithmsdesign
- 流程design
- interfacedesign