软件设计的原则:高内聚、低耦合,面向对象的三大特征,封装、继承、多态。
简称 | 英文名 | 中文名 |
---|---|---|
SRP | The Single Responsibility Principle | 单一责任原则 |
OCP | The Open Closed Principle | 开放封闭原则 |
LSP | The Liskov Substitution Principle | 里氏替换原则 |
ISP | The Interface Segregation Principle | 接口分离原则 |
DIP | The Dependency Inversion Principle | 依赖倒置原则 |
需求调研,准备问问题的模板
内四外八模型 业务内部:业务属性字段、业务属性规则、业务属性逻辑、业务属性场景
业务外部:业务操作者业务权限、前置业务、业务能力要求、业务环境要求、后置业务、业务输入与输出、业务可视化(外观)、业务后续处理(日志、通知)
就是对一个问题点连续以5个“为什么”来自问,以追究其根本原因。虽为5个为什么,但使用时不限定只做“5次为什么的探讨”,主要是必须找到根本原因为止,有时可能只要3次,有时也许要10次,如古话所言:打破砂锅问到底。5why法的关键所在:鼓励解决问题的人要努力避开主观或自负的假设和逻辑陷阱,从结果着手,沿着因果关系链条,顺藤摸瓜,直至找出原有问题的根本原因。
前端使用者
后端使用者
外部使用者 + 内部使用者
主动使用者 + 被动使用者
第1阶段,读源码 持之以恒的克勤精神,天下断无不成功之事 编程语言和OS 读Linux0.01源码,8000行代码,50页心得体会 对比式阅读,0.11版,16000行代码,为什么增加8000多行,是变好了,还是变坏了? 第2阶段,看设计 UML工具,看方法,类,文件切割,官网上有600多页白皮书,OMG证书 用手机阅读Linux 1.0内核的UML类图 阅读Linux2.0内核UML类图,与1.0类图相比,为什么设计发生了变化 推荐书籍《重构与模式》
第3阶段,看代码结构 阅读Linux3.0内核的包图,文件夹 Windows源代码的包图,对比商用软件与开源系统的结构设计的异同 第4阶段,看开源代码获取设计经验 获取他人设计经验的秘诀,外部的开源软件
列出所有功能,画出鲁棒图
画出鲁棒图,边界行为图
画出类图 类于类之间的关系
1. 列出所有变化
2. 问几个问题
变化是单一方向的变化么?
复合变化如何分解这种变化?
复合变化是值类型的变化么? -采用配置方式解决。
复合变化是逻辑变化么? -采用脚本的方式解决。
Enterprise Architect,源代码和数据库
功能到编程文件 从功能到编程文件 ->切割方法 --敏捷方法论 - ICONIX - 对象切割法 1功能N编程文件 1功能1编程文件
接口相关 所有与边界相关程序 边界程序-边界对象 UserInterface - UI ServiceInterface - SI 所有与逻辑控制相关的程序
业务逻辑 控制程序-控制对象 Business Logic - BL
实体对象 所有与实体数据相关的程序 实体程序 - 实体对象 Business Entity - BE
MVC思维,普适性 编程文件分类 1、UI层(UI文件夹)2、BL层(BL文件夹)3、Data层(Data文件夹) UI和BL耦合,解耦->外观层 BL和Data层解耦->持久层
古文式的源代码 -> 白话文的源代码,良好的阅读性,1行1职责 空白行、注释,源代码需要分段,源代码需要分段注释
入口参数,左右边界
-技术的边界 + 业务边界的漏洞
遵守共同的代码规范、编程规范、代码布局风格
推荐书籍 《码出高效》
阿里代码规范插件
好的代码拥有优雅性和直白性
好坏代码差异性体现在程序格局、防御性编程、团队拥有代码。
优秀的代码不需要说明,可怜的代码需要大量注释。
优秀的程序需要更多的时间,但在未来花更少的时间。糟糕的项目往往花更少的时间,但是在未来会浪费更多的时间。
优秀的项目是考虑当前和未来的需要,糟糕的项目只侧重于现在,未来可能不能工作。
良好的程序很容易维护,糟糕的项目很难维护。
高扇入低扇出
--函数名,不变化,知名达意,函数命名,JDK API,命名交给语言专家来做
变量
限制程序文件代码行,限制每个函数代码行《重构》java最小函数,超过20-30行必须重构 java函数20-30行,逻辑不复杂。
20-30行函数花费时间0.5小时-1小时
函数会发生哪些变化?
变化是单一的么?
复合变化怎么处理?分解变化。
--参数列表,变化单一的吗,变化复合的;分解变化 --参数个数变化,单一性变化 ----参数封装法,结构体-对象-集合-数据-流 -> 接口函数,外部远程调用,多种编程语言调用,调用语言变化->封装消息,构造消息,SOAP方式,通讯调用端口->1个消息 ----预留参数法,Windows COM机制《COM本质论》 ----1个-2个-N个参数,最小接口原则,多态机制、角色分离原则
--参数类型变化,单一性变化 ----Object万能量,装箱与拆箱,性能消耗 ----类型封装成泛型
如何阅读源码?
按变量的生命周期的办法阅读源码
按照对比法阅读源码
代码中的重复性或相似性 Copy/paste -重构到框架,aop框架
绕来绕去 0 风险
设计模式重构 大风险
母子函数法 小风险
架构重构-降低风险 使用微服务。
领域驱动-对服务进行分割
23种设计模式解决了 23种变化
设计模式分成三大类: 结构型,创建型,行为型。
类实例化的方式 - 创建型 单例
属性定义结构 -结构型 桥接
复杂算法 - 行为型 策略模式
所有函数都需要测试
Public 测试
接口测试
单参数取值法
边界取值法
分类取值
逻辑取值
组合参数取值
搜索: ---码出高效 filetype:pdf 访问外国网站方式 必须会down论文,读论文
自己缺陷库-典型缺陷发布 缺陷信息记录:症状、场景、证据、推断、定位、策略、之前、之后 每次发版 - 缺陷列表 - 每个缺陷对应源代码(旧的-新的-对比)
代码培训,培训重在归纳总结