zoukankan      html  css  js  c++  java
  • 系统设计及模块划分依据

    系统就是问题域,系统划分过程就是对问题分解过程。实际设计中经常根据业务分类(目的职责环节职能)的划分模块,比如客户有很多个部门,每个部门用的功能放在一个模块中,这样设计的好处是业务部门容易上手。

    模块划分依据:http://www.ibm.com/developerworks/cn/rational/1312_wanggb_arch/

    所谓模块独立性即:不同模块相互之间的联系尽可能少,尽可能减少公共的变量和数据结构。每个模块尽可能的在逻辑上独立,功能上完整单一,数据上与其他模块无太多的耦合

    模块独立性的度量:高内聚低耦合,数据接口简单,可扩展可维护可复用,结构精简。

    模块独立性的度量之一:内聚性
    一个模块内部各成分之间相互关联的强度。
    设计目标:高内聚(一个模块的所有成分都直接参与 并县城对于完成同一功能来说都是最基本的)
    内聚性越高,模块独立性越强,由低向高的内聚方式为:

        巧合内聚
        逻辑内聚
        时间内聚
        过程内聚
        通信内聚
        信息内聚
        功能内聚

    (1)巧合内聚
    模块内各分部间无联系, 例:
    view source
    print?
    1     MOVE O TO R
    2     READ FILE F
    3     MOVE S TO T

    模块中的三个语句没有任何联系,
    缺点:可理解性差, 可修改性差。

    (2)逻辑内聚
    把几种相关功能(逻辑上相似的功能)组合在一模块内, 每次调用由传给模块的参数确定执行哪种功能。

    缺点:增强了耦合程序(控制耦合),不易修改,效率低

    (3)时间内聚
    模块完成的功能必须在同一时间内执行,这些功能只因时间因素关联在一起。如

        初始化系统模块
        系统结束模块
        紧急故障处理模块

    (4)过程内聚
    模块内各处理成分相关,且必须以特定次序执行


    (5)通信内聚
    模块内各部分使用相同的输入数据,或产生相同的输出结果


    (6)信息内聚

    信息内聚指模块写成多个功能,各个功能都在同一数据结构上操作,每个功能有唯一入口。如对同一个数据库的查找-添加-删除-修改模块

    (7)功能内聚
    模块仅包括为完成某个功能所必须的所有成分(模块所有成分共同完成一个功能,缺一不可)

    模块独立性的度量之二
    耦合性是模块间相互依赖程度的度量,耦合的强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据
    耦合性越高,模块独立性越弱, 耦合强度依赖的因素:

        一模块对另一模块的引用
        一模块向另一模块传递的数据量
        一模块施加到另一模块的控制数量
        模块间接口的复杂度



    (1)非直接耦合
    两个模块没有直接关系,模块独立性最强。
    (2)数据耦合
    一个模块调用另一模块时,被调用模块的输入输出都是简单的数据,性松散耦合

    (3)标记耦合
    如两个模块通过传递数据结构(不是简单的数据,而是记录,数组等)加以联系,或都与一个数据结构有关系,则称这两个模块间存在标记耦合

    信息情况是一个数据结构,图中模块都与此数据结构产生依赖关系,它们之间也是标记耦合

    (4)控制耦合
    一模块通过开关量、标志、名字等控制信息,明显地控制另一模块

    控制耦合增加了理解和编程的复杂性,调用模块必须知道被调用模块的内部逻辑,增加了相互依赖

    去除模块间控制耦合的方法:
    1)将被调用模块内的判定上移到调用模块中进行
    2)被调用模块分解成若干单一功能模块。

    (5)外部耦合
    一组模块均与同一外部环境关联(例如: I/O模块与特定的设备、模式和通信 协议关联),它们之间便存在外部耦合。
    外部耦合必不可少,但是这种模块数目应尽量少。

    (6)公共耦合
    一组模块引用同一个共用数据区(也称全局数据区,公共数据环境)
    公共数据区指:

        全局数据结构
        共享通讯区
        内存公共覆盖区等


    公共耦合存在的问题:

        软件可理解性降低: 模块间存在错综复杂的联系
        软件可维护性差: 修改变量名或属性困难
        软件可靠性差: 公共数据区及全程变量无保护措施

    慎用公共数据区和全程变量

    (7)内容耦合
    一模块直接访问另一模块的内部信息(程序代码或数据),最不好的内容耦合形式

    发生内容耦合的情形:

        一模块直接访问另一模块的内部数据
        一模块不通过正常入口转到另一模块内
        两模块有一部分代码重叠
        一模块有多个入口


    如何降低耦合度?
    1)如模块必须存在耦合,选择适当的耦合类型
    原则:
    尽量使用数据耦合
    少用控制耦合
    限制公共耦合的范围
    坚决避免使用内容耦合

    2)降低模块间接口的复杂性。

    http://m.blog.csdn.net/article/details?id=50121411

    http://blog.csdn.net/lyc_daniel/article/details/9212235

    http://www.csframework.com/cs-framework-intro.htm

    http://www.cnblogs.com/kzloser/archive/2012/07/06/2578960.html

  • 相关阅读:
    VS 2008潜在强大的功能:提取EXE文件中的ICO等资源
    园友们注意:淘宝网上QQ会员 4钻 3元 等都为骗子行为
    Comet Async Process Request Handler
    WCF(Sender) to MSMQ to WCF(Receiver)
    ASP.NET Web Form GridView DetailsView Query Edit
    WCF NetTcp AsyncQueue Service
    Xml CDATA 序列化
    Sync Invoke Remoting Async Invoke
    .Net 4.0 Remoting ConcurrentQueue
    Socket Async Receive Data to LinkedList Buffer (telnet proxy server)
  • 原文地址:https://www.cnblogs.com/ada-openmind/p/6286883.html
Copyright © 2011-2022 走看看