项目结束时,要进行回顾:
1. 评估开发过程: 学到的经验和教训; 问题的解决方案
2. 评估设计: 设计适合什么样的问题域; 开始应关注什么问题;什么样的需求变化导致系统大幅修改; 是否有更好的方案;
1. 将 list of requirements 变成 user case。 需求也包括 reliability testability deployability and performance
2. user case 包括: 功能描述;错误描述;测试方案
3. 为概念创建清晰的名词
4. 建立原型
5. 查找能用上的已有功能模块
1. start from big picture( overal archetecture 和 business purpose ) 决定要采用的技术
2. 使用接口交互:函数定义包括执行条件和返回结果
3. consistency is simplicity: code style convention; 采用通用设计
4. 对 assumptions and decisions 提供注释:问题,假设,策略
analysis:
重点明白 basic user case ,基本概念,概念间的关系(1:n 等)。界面显示和如何实现不重要
使用CRC ( class - responsibility - collaboration) 设计类的作用和类间的交互。选取一个用例,从确定的对象开始,通过交谈完成用例的活动,只能要求该类提供某种活动,而不能提供某种信息,当有工作没做时,在类中添加函数或创建新类。
在使用词汇时尽量固守在 问题领域,假设计算机不存在,人怎么解决问题。
一但解决一个会话,开始录音,则这种录音是动态模型,CRC卡片是静态模型
基本步骤:
了解问题域——要解决什么问题
识别用例——由终端用户完成,具有有用结果的任务
创建CRC和动态模型
design:
细节划分:设计属性和函数; 画出class diagram。global planning local designing 在增量开发中这样做
在开始设计时,根据user case 设计草案,包括 basic use cases和misuse cases
测试策略可产生更好的设计
向用户进行测试反馈
1. highly cohesion and loosely coupling 高内聚和低耦合
高内聚:是否可用一句话描述类的作用
低耦合:尽量使用 interface 和 delegate
2. 尽量不使用函数重载
3. 修改容易混淆的函数:修改名称,使用工厂方法替代构造函数
1. 第一次版本发布后,要写总结日志:
在小版本发布时有份简单的日志,主要版本发布时有份长的日志
2. 错误处理
具体的错误处理要和用户协商,最终显示给用户的信息应该不包括程序细节
3. 简单重构
需要读入信息的类,有一函数 Load
去处 fat class 和 big method
创建合适的包
类、文件、函数、属性有合适的名称
类,函数,属性的位置基本正确
4. 第一次迭代
只包括两个user case
对象状态: 状态改变只影响一个函数时使用 switch,影响多个函数时使用state pattern
1. 得出 User case 后要及时和用户交互
2. 查询优化: 构造 ItemConfig 对应列表显示信息,使用Item显示该对象详细信息
3. 测试针对接口中的方法,而不是具体实现
4. 拆分接口:如果不同用户访问一个接口的不同函数,则需要拆分接口
5. 使用模板保证类和对象的一致性
1. unwritten code
1. 定义需求
2. 编写测试脚本
3. 查找已有的组件
多系统间交互: 1. 建立中心数据库存放共享信息,但要考虑同步; 2. 两系统分开存放各自信息,并对外提供可交互接口
与外部系统交互: 1. 定义协议和接口 2. log每次访问和输入验证
当想要泛化但现在还没必要时,写在日志中。