zoukankan      html  css  js  c++  java
  • 《软件架构设计》阅读笔记*part3

    看到本书第十三章发现,需求不应该决定架构,我心想:what?架构不就是要根据用户需求来确定的吗。再往下看,原来是关键需求决定软件架构。

    究其原因也很好理解,在实际软件开发中,不是像大学里这种“实验室代码”,软件架构师没有时间对‘所有需求’进行深入分析,这既是策略,也是现实,当然这对于我以后走向社会提供了很大帮助,转化了一种思路。俗话说,事无巨细,但这在软件架构设计阶段并不适用,姑且不论用户的需求经常变化,反复无常,要想兼顾所有的需求那是不可能的,所以确定关键需求至关重要。结合课上所学知识,相互印证,一般可以从功能需求、质量需求和商业需求三方面来进行分类。任何功能需求,都是由一条特定的‘模块协作链’完成的。

    一方面,不同质量属性之间往往具有相互制约性,于是我们自然应该权衡哪一部分质量属性是架构设计的重点目标。另一方面,功能需求数量众多,应该控制架构设计时需要详细分析的功能(或用例)的个数。

    可通过如下4条启发规则,确定关键功能子集:

    • 核心功能
    • 必做功能
    • 高风险功能
    • 独特功能(覆盖了上述3类功能没有设计的职责)

    只要能较好地覆盖组成架构的不同职责模块,并体现职责模块之间协作关系的特点,那么“关键功能子集”的价值也就体现出来了。为什么架构师的经验很重要呢,确定“关键需求”靠的就是经验,目的是用有限的时间针对关键需求把设计做到位、并减小需求变更对架构设计的影响。这也就是为什么软件架构师比较难做,做好就更不用说了,你既要有多年的软件开发而经验,也就是心中有“货”,又要当机立乱,不能犹豫,确定出本软件最核心的功能是什么,就像硬盘一样,要求读取速度快,就不能要求磁盘利用率高;要保证充分利用磁盘,节省空间,就无法注重读取速度,所以要学会取舍。

  • 相关阅读:
    hdu 3032 Nim or not Nim? (SG函数博弈+打表找规律)
    HDU 2147 kiki's game(博弈)
    C++学习47 文件的概念 文件流类与文件流对象 文件的打开与关闭
    C++学习46 getline()函数读入一行字符 一些与输入有关的istream类成员函数
    C++学习45 流成员函数put输出单个字符 cin输入流详解 get()函数读入一个字符
    C++学习44 格式化输出,C++输出格式控制
    C++学习43 输入输出有关的类和对象
    C++学习42 输入和输出的概念
    C++学习41 exception类
    C++学习40 抛出自己的异常
  • 原文地址:https://www.cnblogs.com/Aming-/p/14941050.html
Copyright © 2011-2022 走看看