《代码大全》阅读笔记-3-三思而后行:前期准备

问题定义只定义了问题是什么,而不涉及任何可能的解决方案

如果没有好的需求,你可能对问题有总体的把握,但却没有集中问题的特定方面

需求像水。如果冻结了,就容易在上面开展建设 ——无名氏

软件架构是软件设计的高层部分,适用于支撑更细节的设计的框架。

离开了良好的软件架构,你可能瞄准了正确的问题,但却使用了错误的解决方案。也许完全不可能有成功的构建

架构的典型组成部分

  • 程序组织
  • 主要的类 2/8原则
  • 数据设计
  • 业务规则
  • 用户界面设计
  • 资源管理
  • 安全性(数据库连接、线程、句柄等)
  • 性能
  • 可伸缩性
  • 互用性
  • 国际化、本地化
  • 输入输出
  • 错误处理
  • 容错性
  • 架构的可行性
  • 过度工程
  • 关于买和 造的决策
  • 关于复用的决策
  • 变更策略
  • 架构的总体质量

要点

  • 构建活动的准备工作的根本目标在于降低风险。要确认你的准备活动是在降低风险,而非增加风险
  • 如果你想开发高质量的软件,软件开发过程必须由始至终关注质量。在线木初期关注质量,对产品质量的正面影响比在项目默契关注质量的一项要大
  • 程序员的一部分工作是教育老板和合作者,告诉他们软件开发过程,包括在开始编程之前进行充分准备的重要性
  • 你所从事的软件项目的类型对构建活动的前期准备有重大影响——许多项目应该是高度迭代的,某些应该是序列式的
  • 如果没有明确的问题定义,那么你可能会在构建期间解决错误的问题
  • 如果没有做完良好的需求分析工作,你可能没有察觉待解决的问题的重要细节。如果需求变更发生在构建之后的阶段,其代价是“在项目早期更改需求”的20-100倍。因此在开始变成之前,你要确认“需求“已经到位了
  • 如果没有做完良好的架构设计,你可能会在构建期间用错误的方法解决正确的问题。架构变更的代价随着“为错误的架构编写的代码数量”增加而增加,因此,也要确认“”架构“”已经到位了。
  • 理解项目的前期准备所采用的方法,并相应地选择构建方法。

核对表

架构核对表

针对各架构主题

  • 程序的整体组织结构是否清晰?是否包含一个良好的架构全局观(及其理由)
  • 是否确定了主要得到构造快(包括每个构造快的职责范围及与其他构造快的接口)
  • 是否明确涵盖了“需求”中所列出的所有功能(每个功能对应的构造快不太多也不太少)
  • 是否描述并论证了那些最关键的类
  • 是否描述并论证了数据设计
  • 是否详细定义了数据库的组织结构和内容
  • 是否指出了所用关键的业务规则,并描述其对系统的影响?
  • 是否描述了用户界面设计的策略‘
  • 是否将用户界面模块化,使界面的免耕不会影响程序其余部分
  • 是否描述并论证了处理I/O的策略
  • 是否估算了稀缺资源(如县城、数据库连接、句柄、网络带框等)的使用量,是否描述并论证了资源管理的策略
  • 是否描述了架构的安全需求
  • 架构是否为每个类、每个子系统、每个模块功能域提出空间与时间预算
  • 架构是否描述了如何达到可伸缩性
  • 架构是否关注互操作性
  • 是否描述了国际化本地化的策略
  • 是否提供了一套内聚的错误处理策略
  • 是否规定了容错的方法
  • 是否证实了系统各个部分的技术可行性
  • 是否详细描述了过度工程的方法
  • 是否包含了必要的 买 vs. 造的决策
  • 架构是否描述了如何加工复用的代码,使之符合其他架构目标?
  • 是否将架构设计得能够适应和可能出现的变更

架构的总体质量

  • 架构是否解决了全部的需求
  • 有没有那个部分是过度架构或欠架构?是否明确宣布了在这方面的预期指标
  • 整个架构是否在概念上协调一致
  • 顶层设计是否独立于用作实现它的机器和语言
  • 是否说明了所有主要的决策和动机
  • 你,作为一名实现该系统的程序员,是否对这个架构感觉良好?

原文地址:https://www.cnblogs.com/taceywong/p/7108379.html

时间: 2024-10-11 19:47:18

《代码大全》阅读笔记-3-三思而后行:前期准备的相关文章

代码大全阅读笔记(二)

代码大全这本书只看懂了一部分,现只对最有收获的部分写入笔记里 第七章 创建子程序的正当理由 (1)降低复杂度;(2)避免代码充分;(3)支持子类化;(4)隐藏顺序;(5)隐藏指针操作;(6)提高可移植性;(7)简化复杂的布尔判断;(8)改善性能 对于过于简单的代码写成子程序的两大理由:1 可以增加程序的可读性 2简单程序可能变成复杂程序 1 在子程序层上设计 内聚性强调把一件事做好,不再做其它任何事情这样做的好处是得到更高的可靠性 顺序上的内聚性是指在子程序内包含有需要按特定顺序执行的操作,这些

代码大全阅读笔记02

继续阅读代码大全这本书,感觉是好厚好难啃啊.刚刚开始读不久到了作者说把主要精力集中于构建活动,可以大大提高程序员的生产率.我想就一个项目来说,思路和设计是站着主导的地位的,你如果不能把思路理清,可能随时都有可能卡在那里,而一旦灵感来了,你就会想泉涌一样的来思路,我们也算是做了一个小的项目的了,虽然很low吧,但是好歹也算有点体会.我们总是在设计的时候会走投无路,不知所措,以至于每一次开始时都是没有思路起手都只能积压在那里,实在是不知道该怎么做.我觉得 P28 的那个食物链的例子更有说服力,健康的

代码大全阅读笔记01

又是一本经典的书<代码大全>,从豆瓣上看到了很多的好评,看了一点感觉大全确实是如其名,一路下来都是很实用的东西,有些虽然都接触到了,但是再看一遍仍旧是收益很大.首先,软件构建的核心就是管理复杂度.虽然书中有不少的篇幅来讨论变量.语句等等这些编程的基本要素,还包括代码改善和调整的策略和方法,可谓不无巨细.不过深入理解一下,这些内容都是围绕着上面这句话展开的,也就是软件构建的核心就是管理复杂度.而这一目标产生的根源就在于人脑智力同软件项目复杂程度之间的矛盾.书中常常会提到几个数字,差不多在6.7左

代码大全阅读笔记03

无论怎么拖也总是要做的,我感觉自己的拖延似乎是毫无意义的浪费时间,我的拖延挤出来的时间都是在干啥,这真是让我反思.好了继续读代码大全,我开始烦了已经,因为它太厚了.过渡工程,这个问题把握好并不容易.一方面,我们希望系统健壮,如果组成系统的各个部分只在最低限度满足健壮性要求,那么整体通常是达不到要求的.软件健壮性不取决于最薄弱的地方,而是等于所有薄弱环节的乘积.构架应该指出每个部分,程序员为了谨慎而宁可做过度工程,还是做出简单的能工作的东西就够了.有些东西是不应该过分花精力的,这个错误我们也犯过,

代码大全阅读笔记(三)

一  使用指针的一般技巧 错误的使用指针,给一个坏了的指针赋值时,会把数据写入本不该写值的内存区域.这称为内存破坏而更正指针错误的大部分工作量是找出它的位置. 正确地使用指针要求程序员采用一种双向策略.第一,要首先避免造成指针错误.指针错误很难发现,因此采取一些预防性措施是值得的,其次,在编写代码后尽快的找出错误来 二 寻找错误的方法 1 把指针操作限制在子程序或者类里面 2 同时声明和定义指针 3 在使用指针之前检查指针 4 先检查指针所引用的变量再使用它 5 用狗牌字段检测损毁的内存(“标记

代码大全学习笔记(什么是构建)

  构建有时也被认为是"coding"或者"programing".编码算不上是最贴切的词,因为它有一种"把已经存在的设计机械化的翻译成计算机语言"的意味,而构建并不是机械化的,需要可观的创造力和判断力,人们常常用编程代替构建.   构建的步骤: 1.验证前面的工作已经完成(如定义问题,需求分析). 2.确定如何去测试所写的代码. 3.设计并编写类或者子程序. 4.创建并命名变量和具名常量. 5.选择控制结构,组织语句块. 6.对你的代码进行单元

代码大全读书笔记 - 开篇

说起来,<代码大全>这本书书名实在恶俗.在我推荐给展鸿的时候,他说"雾草,这名字看着就像天朝地摊那种XX全书一类的山寨书-" 是的,其实买这个书的原因就是京东买100减30,我买了10块钱的东西,凑了一下单,书到手之前还以为是代码清单,或者以前ACM模板一样的书,甚至买来的一个月里面都拿来当枕头(足足10+cm厚). 这个周末偶然的翻开,才发现,世界上竟然有如此精彩的书,而且很多东西讲的虽然是软件项目,但给了我很多引申到其他东西上面的灵感.很多地方我读到之后,都会兴奋的心跳

《梦断代码》阅读笔记Ⅰ

一.当前进度以及新的阅读计划 目前,我已阅读到正文的P78,也就是刚开始看第四章:乐高王国. 我尽量坚持每天阅读至少10页,但是由于自己的懒惰以及各种原因,这个“项目”已经延误了. 因此,我得实时地更新我的阅读计划.在剩下的20天里阅读326-78=248页的正文,折合每天12.4页. 希望自己督促自己,能严格按照计划进行或提前完成. 二.阅读感想 首先,<梦断代码>这本书我只有电子版,虽然携带方便,但是大多数人更喜欢阅读纸质得书籍,包括我.所以整个阅读过程体验不太好. 其次,我都是利用一些零

《梦断代码》阅读笔记之二

以下是<梦断代码>的章节目录: 我打算用3次阅读将其详略得当的读完,这是第一次,0-3章: 读完第零章“软件时间”我就有一个想法“这哥们在说神马,貌似没有逻辑可言”但是仔细想一想他在给我们介绍软件的大致发展简史以及我们将在以后可能(哦不不不)是一定会碰上老多老多的BUG让我们头疼,软件工程虽说是工程但是他和普通的建桥铺路不大相同,它更为抽象是逻辑的堆叠用作者的话讲就是“麻烦一堆”想想也对,我已经做好了自己焦头烂额甚至拿着睡袋睡办公室的准备了.但是软件工程这专业甚至这个专业培养出的人才还是非常值

《梦断代码》阅读笔记3

对这本书的阅读终于要结束了,“梦断代码”:代码阻断了梦的实现吗?一直以为,计算机是万能的,自己想的都可以通过代码实现.在接触代码以后的这段时间里,我的想法改变了.代码可以实现自己的想法,但是怎么实现却要看自己了,算法自己思考,计算机只负责运行,运行通过就说明算法通过了,否则就是失败,没有程序的对与错,只有程序的优化. 鲍勃提出了”提靴带的目的是推动反馈循环,今天用昨天发明的工具为明天打造更好的工具:而吃狗食则是迫使开发者把鼻子伸到产品的问题中.加速发现和修正缺陷的低调且实用的方法“,提靴带.吃狗