zoukankan      html  css  js  c++  java
  • 模块分析

      首先,强调一下,模块分析前提一定是流程已经梳理清楚;即业务层面和实现层面已经有了比较明确的思路,之后再进行模块化分析。

      首先是经典的输入输出模型,学过PMP的人应该对于这模型非常熟悉;分析模块首先就是分析他的触发场景是什么,输入(参数)是什么,通过分析触发场景,了解他是被动的还是主动的,发起方都有哪些;比如对于交付器而言,他的调用方是总控,那么交付器的触发就是被动调用;输入参数就是文件的文件夹,单位以及四属性,入口参数在分析初期可以先笼统的考虑,因为输入参数在分析模块内部流程的时候会不断进行细化;但是通过分析参数能够确立一种意识:模块就有独立性,接收参数可以内部进行运作;设计模块的基本思路就是低耦合,高内聚;对于外部依赖越小越好。至于输出的是一个反馈(比如一次RPC调用)。

      第二步是分析模块内部处理,首先是分析流程的步骤以及数据数据是用来驱动支持流程进展的,流程是由步骤组成,分析清楚步骤,以及每个步骤所需要的数据;数据就是要识别出来的对象;如果多个分支,考虑是否需要多个对象来表明用意,比如加密是一个分支,解密是一个分支,那么作为任务可能需要设计为加密任务,解密任务;

      对于数据需要分析数据的结构是怎样的,比如是List,还是BlockingQueue等;这个是基于对于数据操作来设计的;在对数据分析的时候,还要对数据的来源进行分析,这个存在了模块交互(比如内存模块,数据库模块),还会影响输入参数,因为有的数据会考虑有输入进行处理;

      分析完了数据,就要考虑一下完成该步骤资源问题,就是完成这些步骤/流程所需要的资源,什么是资源?首先资源是有限的,其次是资源是可申请而且每申请一次就会减少。资源包括线程(CPU),内存(队列,直接内存存储byte字节),硬盘(保存文件);还包括业务资源,比如任务上限,最多同时处理多少任务。比如对于流程流转,是通过多线程,从线程池中申请线程完成的,那么就需要线程;通过对资源的考虑,首先可以促使对程序的设计进行考虑,其次,可以对于资源的限制和判断,来让系统更加健壮。

      接着就是识别类,识别类之前要识别对象,什么是对象?行为和状态载体。就是要完成步骤中的任务,需要哪些行为,然后为这些行为以及这些行为导致的状态,在逻辑上进行组织,对象的抽象以及归类就是类;比如一个业务任务对象,其实在程序运行过程中会有很多业务任务对象,然后,对这些业务对象进行抽象,抽象出来了业务任务类;但是注意这些对象之间的区别,有的需要压缩,有的不需要进行压缩,你就需要进行权衡他们是否需要进行剥离,压缩任务以及不压缩任务,你可以选择通过一个字段来做区别,但是关键是看差别到底多大,是否还有的不同药进行区分;就是尽量减少if分支,而是通过不同的业务对象(类)来进行区分因为if分支的意图复杂,需要深入细节,如果在类上面做区分,意图明显,而且能够在一个较高的角度对流程做梳理。

      然后,考虑一下内部流程是自驱的(链式的,一个调一个),还是需要中间来一个调度的,本质是控制权的归属,步骤完成之后,就是步骤之间可以自己进行下一步处理,将控制权交给调度类进行下一步调度。

      以上都是正常系,一定要先把正常系梳理清楚了,最后,要对于每个节点做异常分析(异常有哪些)以及异常处理(发生异常怎么办)。

      最后,再强调一下,一定要在模块分析之前,已经有了清晰的流程轮廓。

  • 相关阅读:
    深入理解计算机系统 第六章 存储器层次结构 第二遍
    深入理解计算机系统 第六章 存储器层次结构
    深入理解计算机系统 第八章 异常控制流 Part2 第二遍
    深入理解计算机系统 第八章 异常控制流 part2
    深入理解计算机系统 第八章 异常控制流 Part1 第二遍
    深入理解计算机系统 第八章 异常控制流 part1
    深入理解计算机系统 第三章 程序的机器级表示 Part2 第二遍
    深入理解计算机系统 第三章 程序的机器级表示 part2
    深入理解计算机系统 第三章 程序的机器级表示 Part1 第二遍
    深入理解计算机系统 第三章 程序的机器级表示 part1
  • 原文地址:https://www.cnblogs.com/xiashiwendao/p/6800054.html
Copyright © 2011-2022 走看看