diff --git a/README.md b/README.md index 49c640c..02f472a 100644 --- a/README.md +++ b/README.md @@ -1 +1,165 @@ -# A-Philosophy-of-Software-Design \ No newline at end of file +# A-Philosophy-of-Software-Design +《软件设计哲学》 + +## 目录 + +#### 前言 + +#### 1引言 +##### 1.1如何使用本书 + +#### 2复杂性的本质 +##### 2.1定义复杂性 +##### 2.2复杂性的症状 +##### 2.3复杂性的原因 +##### 2.4复杂性是递增的 +##### 2.5结论 + +#### 3工作守则还不够 +##### 3.1战术编程 +##### 3.2战略规划 +##### 3.3投资多少? +##### 3.4初创公司和投资 +##### 3.5结论 + +#### 4个模块应该很深 +##### 4.1模块化设计 +##### 4.2界面中有什么? +##### 4.3抽象 +##### 4.4深层模块 +##### 4.5浅模块 +##### 4.6 Classitis +##### 4.7示例:Java和Unix I / O. +##### 4.8结论 + +#### 5信息隐藏(和泄漏) +##### 5.1信息隐藏 +##### 5.2信息泄露 +##### 5.3时间分解 +##### 5.4示例:HTTP服务器 +##### 5.5示例:类太多了 +##### 5.6示例:HTTP参数处理 +##### 5.7示例:HTTP响应中的默认值 +##### 5.8隐藏在类中的信息 +##### 5.9太过分了 +##### 5.10结论 + +#### 6个通用模块更深入 +##### 6.1使课程有点通用 +##### 6.2示例:为编辑器存储文本 +##### 6.3更通用的API +##### 6.4一般性导致更好的信息隐藏 +##### 6.5问自己的问题 +##### 6.6结论 + +#### 7个不同的层,不同的抽象 +##### 7.1传递方法 +##### 7.2接口复制何时可以? +##### 7.3装饰 +##### 7.4接口与实现 +##### 7.5传递变量 +##### 7.6结论 + +#### 8向下拉复杂性 +##### 8.1示例:编辑器文本类 +##### 8.2示例:配置参数 +##### 8.3太过分了 +##### 8.4结论 + +#### 9更好地在一起还是更好? +##### 9.1如果共享信息,请汇集在一起 +##### 9.2如果它将简化界面,汇集在一起 +##### 9.3汇集在一起以消除重复 +##### 9.4单独的通用和专用代码 +##### 9.5示例:插入光标和选择 +##### 9.6示例:用于记录的单独类 +##### 9.7示例:编辑器撤消机制 +##### 9.8分裂和连接方法 +##### 9.9结论 + +#### 10定义存在的错误 +##### 10.1为什么例外会增加复杂性 +##### 10.2太多例外 +##### 10.3定义错误不存在 +##### 10.4示例:Windows中的文件删除 +##### 10.5示例:Java子串方法 +##### 10.6掩盖异常 +##### 10.7异常聚合 +##### 10.8刚崩溃? +##### 10.9设计特殊情况不存在 +##### 10.10太过分了 +##### 10.11结论 +#### 11设计两次 +#### 12为什么写评论? 四个借口 +##### 12.1好的代码是自我记录的 +##### 12.2我没时间写评论 +##### 12.3评论过时并变得具有误导性 +##### 12.4我看到的所有评论都毫无价值 +##### 12.5写得好的评论的好处 + +#### 13评论应该描述代码中不明显的事情 +##### 13.1选择约定 +##### 13.2不要重复代码 +##### 13.3较低级别的注释增加了精度 +##### 13.4更高层次的评论增强了直觉 +##### 13.5接口文档 +##### 13.6实施意见:什么和为什么,而不是如何 +##### 13.7跨模块设计决策 +##### 13.8结论 +##### 13.9第13.5节中的问题答案 +#### 14选择名称 +##### 14.1示例:错误的名称会导致错误 +##### 14.2创建图像 +##### 14.3名称应该准确 +##### 14.4始终使用名称 +##### 14.5不同的意见:去风格指南 +##### 14.6结论 + +#### 15首先写下评论 +##### 15.1延迟评论是不好的评论 +##### 15.2首先写下评论 +##### 15.3评论是一种设计工具 +##### 15.4早期评论是有趣的评论 +##### 15.5早期评论是否昂贵? +##### 15.6结论 + +#### 16修改现有代码 +##### 16.1保持战略性 +##### 16.2维护注释:将注释保留在代码附近 +##### 16.3注释属于代码,而不是提交日志 +##### 16.4维护评论:避免重复 +##### 16.5维护注释:检查差异 +##### 16.6更高级别的注释更容易维护 + +#### 17一致性 +##### 17.1一致性的例子 +##### 17.2确保一致性 +##### 17.3太过分了 +##### 17.4结论 + +#### 18代码应该是显而易见的 +##### 18.1使代码更加明显的事情 +##### 18.2使代码不那么明显的事情 +##### 18.3结论 + +#### 19软件趋势 +##### 19.1面向对象的编程和继承 +##### 19.2敏捷开发 +##### 19.3单元测试 +##### 19.5设计模式 +##### 19.6吸气鬼和二传手 +##### 19.7结论 + +#### 20性能设计 +##### 20.1如何考虑绩效 +##### 20.2修改前的测量 +##### 20.3围绕关键部分进行设计 +##### 20.4一个例子:RAMCloud缓冲区 +##### 20.5结论 + +#### 21结论 + +#### v指数 + +#### 设计原则摘要 +#### 红旗总结