精华内容
下载资源
问答
  • 设计模式——设计模式概述
    万次阅读 多人点赞
    2019-10-12 08:07:49

    软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。设计模式主要是为了解决某类重复出现的问题而出现的一套成功或有效的解决方案。设计模式提供一种讨论软件设计的公共语言,使得熟练设计者的设计经验可以被初学者和其他设计者掌握。设计模式还为软件重构提供了目标。

    1.设计模式由来

    软件设计模式源自于建筑学。积淀了几千年的建筑学工程总结出一系列值得工程领域(包括软件工程领域)借鉴和学习的经验。哈佛大学建筑学博士、美国加州大学伯克利分校建筑学教授Christopher Alexander博士及其研究团队,经过对住宅和城市环境大量的调查研究,发现大众对住宅和城市环境存在部分共同的认同规律。Christopher Alexander在著作《A Pattern Language: Towns, Buildings, Construction》中把这些认同规律归纳为253个模式,对每一个模式(Pattern)都从Context(前提条件)、Theme或Problem(目标问题)、 Solution(解决方案)三个方面进行了描述,并给出了从用户需求分析到建筑环境结构设计直至经典实例的过程模型。在他的经典著作《建筑的永恒之道》中,他给出了关于模式的定义:

          每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次地重用那些已有的成功的解决方案,无须再重复相同的工作。

    总结而言&#x

    更多相关内容
  • 总体设计(概要设计或初步设计)的基本目的就是回答“概括地说,系统应该如何实现?” 工作内容:将划分出组成系统的物理元素——程序、文件、数据库、人工过程和文档等黑盒子级“产品”。黑盒子里的具体内容将在...

    基本目的:“概括回答地说就是,系统应该如何实现?”

    工作内容: 将划分出组成系统的物理元素——程序、文件、数据库、人工过程和文档等黑盒子级“产品”。黑盒子里的具体内容将在以后仔细设计。

    重要任务: 是设计软件的结构——模块组成,以及这些模块相互间的关系。
    首先根据需求分析阶段得到的数据流图寻找实现目标系统的各种不同的方案,为每个合理的方案准备一份系统流程图,列出组成系统的所有物理元素,进行成本/效益分析,并且制定实现这个方案的进度计划。选出一个最佳方案向用户推荐。

    必要性(详细设计之前): 站在全局高度上,花较少成本,从较抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,降低成本、提高质量。

    一、设计过程

    • 系统设计阶段:确定系统的具体实现方案;
    • 结构设计阶段:确定软件结构。

    (一) 9个步骤

    典型的总体设计过程包括下述9个步骤

    1. 设想供选择的方案

    • 考虑各种可能的实现方案从中选出最佳
    • 根据系统的逻辑模型,分析比较不同的物理实现方案,选出最佳方案,提高系统的性/价比。
    • 由需求分析的数据流图作为出发点,把数据流图中的处理分组的各种可能的方法,抛弃在技术上行不通的分组方法,提供可供选择的物理系统。

    2. 选取合理的方案

    选取低成本、中等成本和高成本的三种方案,对每个合理的方案分析员都应该准备下列4份资料
    (1) 系统流程图;
    (2) 组成系统的物理元素清单;
    (3) 成本/效益分析;
    (4) 实现这个系统的进度计划。

    3. 推荐最佳方案

    推荐一个最佳的方案,并且为推荐的方案制定详细的实现计划。
    提请使用部门负责人进一步审批之后,将进入总体设计过程的下一个重要阶段——结构设计。

    4. 功能分解

    1. 程序和文件(或数据库)是组成系统的主要元素,需要设计决定。
    2. 对程序的设计通常分为两个阶段完成:结构设计和过程设计。
    3. 结构设计确定程序由哪些模块组成,以及这些模块之间的关系(总体设计);
    4. 过程设计确定每个模块的处理过程(详细设计)。
    5. 为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。
    6. 经过分解之后应该使每个功能对大多数程序员而言都是明显易懂的。
    7. 功能分解导致数据流图的进一步细化,同时还应该用IPO图或其他适当的工具简要描述细化后每个处理的算法。

    5. 设计软件结构

    1. 通常程序中的一个模块完成一个适当的子功能,将模块组织成良好的层次系统,顶层模块调用下层模块以实现程序的完整功能
    2. 软件结构(即由模块组成的层次系统)可以用层次图或结构图来描绘。
    3. 若数据流图细化到适当的层次,则可以直接从数据流图映射出软件结构。

    6. 设计数据库

    1. 对于需要使用数据库的应用系统,软件工程师应该在需求分析阶段所确定的系统数据需求的基础上,进一步设计数据库。
    2. 在数据库课中已经详细讲述了设计数据库的方法,本书不再赘述。

    7. 制定测试计划

    在软件开发的早期阶段考虑测试问题,能促使软件设计人员在设计时注意提高软件的可测试性。
    本书第7章将仔细讨论软件测试的目的和设计测试方案的各种技术方法。

    8. 书写文档

    完成的文档通常有下述几种:

    1. 用系统流程图描绘的系统构成方案,组成系统的物理元素清单,成本/效益分析;对最佳方案的概括描述,精化的数据流图,用层次图或结构图描绘的软件结构,用IPO图或其他工具(例如,PDL语言)简要描述的各个模块的算法,模块间的接口关系,以及需求、功能和模块三者之间的交叉参照关系等等。
    2. 用户手册根据总体设计阶段的结果,修改更正在需求分析阶段产生的初步的用户手册。
    3. 测试计划包括测试策略,测试方案,预期的测试结果,测试进度计划等等。
    4. 详细的实现计划
    5. 数据库设计结果
    6. 审查和复审

    最后应该对总体设计的结果进行严格的技术审查,在技术审查通过之后再由使用部门的负责人从管理角度进行复审。
    在这里插入图片描述
    在这里插入图片描述软件设计工作流程

    二、设计原理

    (一) 模块化

    “模块”,又称“构件” 。

    • 过程、函数、子程序和宏等,都可作为模块;面向对象方法学中的对象是模块,对象内的方法(或称为服务)也是模块。模块是构成程序的基本构件。
    • 模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
    • 模块化是为了使一个复杂的大型程序能被人的智力所管理,化繁为简、化难为易、化整为零。

    设函数C(x)定义问题x的复杂程度,函数E(x)确定解决问题x需要的工作量(时间)。对于两个问题P1和P2,如果C(P1)>C(P2),显然E(P1)>E(P2)。
    C(P1+P2)>C(P1)+C(P2)
    E(P1+P2)>E(P1)+E(P2)
    这就是模块化的根据。
    在这里插入图片描述
    在这里插入图片描述

    (二)抽象

    • 抽象就是抽出事物的本质特性而暂时不考虑它们的细节。

    • 处理复杂系统的有效的方法是用层次的方式构造和分析它。一个复杂的动态系统首先可以用一些高级的抽象概念构造和理解,这些高级概念又可以用一些较低级的概念构造和理解,如此进行下去,直至最低层次的具体元素。

    • 任何问题的模块化时,可提出许多抽象的层次。
      在抽象的最高层次使用问题环境的语言,以概括的方式叙述问题的解法;
      较低抽象层次采用更过程化的方法,把面向问题的术语和面向实现的术语结合起来叙述问题的解法;
      最后在最低的抽象层次用可直接实现的方式叙述问题的解法。

    • 软件工程过程的每一步都是对软件解法的抽象层次的一次精化。
      可行性研究阶段,软件作为系统的一个完整部件;
      需求分析期间,软件解法是使用在问题环境内熟悉的方式描述的;
      由总体设计向详细设计过渡时,抽象的程度也就随之减少了;
      最后,当源程序写出来以后,也就达到了抽象的最低层。

    • 逐步求精和模块化的概念,与抽象是紧密相关的。
      软件结构顶层的模块,控制了系统的主要功能并且影响全局;
      在软件结构底层的模块,完成对数据的一个具体处理,用自顶向下由抽象到具体的方式分配控制,简化了软件的设计和实现,提高了软件的可理解性和可测试性,并且使软件更容易维护。

    (三)逐步求精

    逐步求精是人类解决复杂问题时采用的基本方法,逐步求精可定义为:“为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。”
    逐步求精之所以如此重要,是因为人类的认知过程遵守Miller法则:一个人在任何时候都只能把注意力集中在(7±2)个知识块上。
    Miller法则是人类智力的基本局限,我们不可能战胜自己的自然本性,只能接受这个事实,承认自身的局限性,并在这个前提下尽我们的最大努力工作。
    逐步求精最初是由Niklaus Wirth提出的一种自顶向下的设计策略, Wirth曾说:
    “我们对付复杂问题的最重要的办法是抽象,因此,对一个复杂的问题不应该立刻用计算机指令、数字和逻辑符号来表示,而应该用较自然的抽象语句来表示,从而得出抽象程序。抽象程序对抽象的数据进行某些特定的运算并用某些合适的记号(可能是自然语言)来表示。对抽象程序做进一步的分解,并进入下一个抽象层次,这样的精细化过程一直进行下去,直到程序能被计算机接受为止。这时的程序可能是用某种高级语言或机器指令书写的。”
    求精要求设计者细化原始陈述,随着每个后续求精(即细化)步骤的完成而提供越来越多的细节。

    • 抽象与求精是一对互补的概念。
    • 抽象使得设计者能够说明过程和数据,同时却忽略低层细节。
    • 求精则帮助设计者在设计过程中逐步揭示出低层细节。
    • 这两个概念都有助于设计者在设计演化过程中创造出完整的设计模型。
      在这里插入图片描述

    (四) 信息隐藏和局部化

    如何得到最好的一组模块?

    • 信息隐藏原理指出:设计一个模块,使得包含的信息(过程和数据) 对于不需要这些信息的模块来说,是不能访问的。
    • 局部化是指把一些关系密切的软件元素
    • 物理地放得彼此靠近。
    • 在模块中使用局部数据元素是局部化的一个例子。局部化有助于实现信息隐藏。

    (五) 模块独立

    模块独立是模块化、抽象、信息隐藏和局部化概念的直接结果。
    希望这样设计软件结构,使得每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系很简单。

    模块独立的两条理由:
    第一,有效的模块化(即具有独立的模块)的软件比较容易开发。
    因为功能简单而且接口可简化,当许多人分工合作时这个优点尤其重要。
    第二,独立的模块比较容易测试和维护。
    模块独立是设计的关键,而设计又是决定软件质量的关键环节。
    模块的独立程度可以由两个定性标准度量,分别称为内聚和耦合。

    • 耦合用于衡量不同模块彼此间互相依赖(连接)的紧密程度;
    • 内聚衡量一个模块内部各个元素彼此结合的紧密程度。
    • 模块独立要求:高内聚、低耦合;
    • 耦合
      耦合是对一个软件结构内不同模块之间互连程度的度量。
      耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。
      模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性。
      在软件设计中应该追求尽可能松散耦合的系统。
      模块分解的一个目标是使块间联系尽可能小,块间联系的大小可从三个方面衡量:
      在这里插入图片描述
      在这里插入图片描述
      (1)内容耦合(content coupling)
      一个模块直接访问另一模块的内部数据。
      一个模块不通过正常入口转到另一模块的内部。
      一个模块有多个入口。
      两个模块有部分代码重迭。
      在这里插入图片描述
      (2)公共耦合(common coupling)
      若干模块访问一个公共的数据环境,则它们之间的耦合称为公共耦合。公共环境可为全局数据结构、共享的通信区、内存的公共覆盖区等。显然,公共数据区的变化,将影响所有公共耦合模块,严重影响模块的可靠性和可适应性,降低软件的可读性。
      在这里插入图片描述
      (3)控制耦合(control coupling)
      一个模块传递给另一模块的信息是用于控制该模块内部逻辑的控制信号。
      显然,对被控制模块的任何修改,都会影响控制模块。
      在这里插入图片描述
      (4)复合耦合(Data Coupling)
      一个模块传送给另一个模块的参数是一个复合的数据结构,例如,包含几个数据单项的记录。

    (5)数据耦合(Data Coupling)
    若两个模块间通过参数交换信息,而且交换的信息仅仅是数据。数据耦合是松散的耦合,模块之间的独立性比较强。
    2. 内聚
    内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。
    理想内聚的模块只做一件事情。
    设计时应该力求做到高内聚,通常中等程度的内聚也是可以采用的,而且效果和高内聚相差不多;但是,低内聚很坏,不要使用。
    内聚性愈强,模块独立性愈好。
    在这里插入图片描述
    偶然内聚:
    模块内部各部件之间没有任何关系,仅仅为了满足模块尺寸要求而将一些程序合入一可模块,出现错误时,难以确定位置;
    在这里插入图片描述
    逻辑内聚:
    这种模块把几种相关的功能组合在一起,每次调用时,由传送给模块的判断参数来确定该模块应执行那种功能。
    在这里插入图片描述
    瞬时内聚:
    模块包含的任务必须在同一段时间内执行,由于不使用选择参数,逻辑简单,但结合了许多无关任务,错误难以定位。
    例如:各种初始化。

    通信内聚:
    模块中所有的部件都访问同一组数据,几个部件之间有数据关系而无控制关系。
    优点:可通过参数选择不同的作用,是一种较理想的内聚。在这里插入图片描述

    顺序内聚:
    模块完成多个功能,各个功能都在同一数据结构上操作,每项功能有唯一的入口点。
    较好的内聚。
    在这里插入图片描述
    功能内聚:
    模块内所有部件处理同一组数据,共同完成单一的功能,是最理想的内聚之一。
    在这里插入图片描述

    三、启发规则

    在长期的软件开发实践中,总结经验,得出了一些启发式规则。
    没有基本原理和概念那样普遍适用,在改进软件设计,提高软件质量有积极意义。
     下面介绍几条启发式规则。
      1.改进软件结构提高模块独立性
      2.模块规模应该适中
      3. 深度、宽度、扇出和扇入都应适当
      4. 模块的作用域应该在控制域之内
      5. 力争降低模块接口的复杂程度
      6. 设计单入口单出口的模块
      7. 模块功能应该可以预测

    四、描绘软件结构的图形工具

    (一) 层次图和HIPO图

    层次图用来描绘软件的层次结构。
    在这里插入图片描述

    (二)结构图

    结构图也是描绘软件结构的图形工具。
    一个方框代表一个模块,框内注明模块的名字或主要功能;方框之间的箭头(或直线)表示模块的调用关系。
    尾部是空心圆表示传递的是数据,实心圆表示传递的是控制信息。
    在这里插入图片描述

    (三)结构图

    有一些附加的符号,可以表示模块的选择调用或循环调用。
    如左图表示当模块M中某个判定为真时调用模块A,为假时调用模块B。如右图表示模块M循环调用模块A、B和C。

    五、 面向数据流的设计方法

    面向数据流的设计方法的目标是给出设计软件结构的一个系统化的途径。
    因为任何软件系统都可以用数据流图表示,所以面向数据流的设计方法理论上可以设计任何软件的结构。
    通常所说的结构化设计方法(简称SD方法),也就是基于数据流的设计方法。

    (一)概念

    面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的方法。信息流有下述两种类型。

    1. 变换流
      在这里插入图片描述
    2. 事务流
      如图所示,数据流是“以事务为中心的”,即数据沿输入通路到达一个处理T,根据输入数据的类型选出一个来执行。这类数据流应该划为一类特殊的数据流,称为事务流。
      在这里插入图片描述
      如图处理T称为事务中心,它完成下述任务:
      (1) 接收输入数据(输入数据又称为事务);
      (2) 分析每个事务以确定它的类型;
      (3) 根据事务类型选取一条活动通路。

    3 设计过程
    基于数据流方法的设计过程
    在这里插入图片描述

    (二) 变换分析

    变换分析把具有变换流特点的数据流图按预先确定的模式映射成软件结构。
     
    中心变换型(transform center)— 变换分析
    其特点是:DFD图可以明显分为“输入-处理-输出”三部分。
    在这里插入图片描述
     事务处理型(transaction)— 事务分析
      这类数据流图可看成是对一个数据经过某种加工后,按加工的结果选择一个输出数据流继续执行的处理。
    在这里插入图片描述

    (三)事务分析技术

    ① 确定流界:首先从数据流图中找出事务流、事务处理中心和事务路径。
    ② 进行一级分析,设计上层模块:对事务中心应设计“事物控制”模块;对事物流应设计“接受事物”模块;对事务路径,应设计“发送控制”模块。
    ③ 进行二级分解,设计中下层模块:接受分支,用类似于转换处理型数据流图中对输入数据流的方法设计中下层。对于发送分支,在发送控制模块下为每条事务路径设计一个事务处理模块,这一层称为事务层。
    在这里插入图片描述

    (四) 设计优化

    设计优化应力求做到在有效的模块化的前提下使用最少量的模块,以及在能够满足信息要求的前提下使用最简单的数据结构。
    对于时间是决定性因素的场合,下述方法对软件进行优化是合理的:

    • (1)在不考虑时间因素的前提下开发并精化软件结构;

    • (2)在详细设计阶段选出最耗费时间的那些模块,仔细地设计它们的处理过程(算法),以求提高效率;

    • (3) 使用高级程序设计语言编写程序;

    • (4) 在软件中孤立出那些大量占用处理机资源的模块;

    • (5) 必要时重新设计或用依赖于机器的语言重写上述大量占用资源的模块的代码,以求提高效率。

    上述优化方法遵守了一句格言:“先使它能工作,然后再使它快起来。”

    展开全文
  • 软件工程 | 第章 系统设计

    万次阅读 2020-04-13 16:36:44
    软件工程 系列为本学期(2020春季)软件工程...1.软件设计的两阶段 2.软件设计的目标 3.软件设计中的信息流 4.软件设计的指导性原则 二、软件设计的基本原理 (一)模块化 (二)抽象 (三)逐步求精 ()信息...

    软件工程 系列为本学期(2020春季)软件工程以及软件工程实践课程笔记整理~

    天朗气清,惠风和畅,空气里渐渐飘起了调皮的柳絮

    今天软工老师终于上课啦,来更新一波笔记~

    目录

    一、软件设计的目标的任务

    1.软件设计的两个阶段

    2.软件设计的目标

    3.软件设计中的信息流

    4.软件设计的指导性原则

    二、软件设计的基本原理

    (一)模块化

    (二)抽象

    (三)逐步求精

    (四)信息隐藏

    (五)模块的独立性

    启发式设计规则(不属于普遍遵循的原理)

    三、软件体系结构设计

    1.软件体系结构的概念

    2.软件体系结构的重要性

    3.软件体系结构风格

    4.软件体系结构设计方法 

    四、系统设计方法(实现设计模型的手段和方法) 

     (一)程序流程图

    (二)盒图(N-S图)

    (三)问题分析图(problem analysis diagram, PAD)

    (四)HIPO图(Hirearchy plus input/processing/output)

    (五)判定表

    (六)判定树

    (七)过程设计语言(Process design language,PDL)

    (八)Jackson图

    五、用户界面设计

    1.设计原则

    2.设计过程

    3.设计方法


    软件设计:根据需求分析的“做什么”来确定系统该“怎样做”。需要有经验的软件设计师完成、设计方法遵循一系列的原则和策略、经过专家和用户的评审

     

    一、软件设计的目标的任务

    1.软件设计的两个阶段

    (1)概要设计

    • 包含数据设计、体系结构设计、接口设计、过程设计
    • 任务-->将需求分析转化为软件的系统结构和数据结构
      • 分解独立的软件部件
      • 建立模块之间的层次结构、调用关系、模块间的接口、人机交互界面

    (2)详细设计-->对概要设计阶段建立的模型进行详细的定义和说明

    • 确定每个模块的具体算法
    • 模块内部数据结构和数据库的物理结构
    • 模块接口的具体实现
    • 每个模块设计测试用例
    • 文档->复审

    2.软件设计的目标

    通过一系列迭代过程生成一个要构造的实体的模型/表示

    3.软件设计中的信息流

    在需求分析基础上,将分析模型中的数据、功能、行为模型-->设计模型中的数据设计、体系结构设计、接口设计、构件设计

    (1)体系结构设计:软件主要结构性元素及其之间的关系,从需求规约、分析模型和分析模型定义的系统交互中导出

    (2)数据设计:将信息模型(E-R图定义的对象和关系、数据字典中的详细数据内容)-->数据结构/数据库结构

    (3)接口设计:内部模块之间、软件和外部系统之间、软件和人之间的通信   基于数据流图和控制流图

    (4)过程设计(构件设计):描述软件构件的内部实现细节

    4.软件设计的指导性原则

    (1)可跟踪性:设计阶段的单独一个元素可跟踪到需求的一个或多个方面

    (2)一致性:一致的概念、符号、术语;一致的内部接口、软硬件接口

    (3)可靠性:即使遇到异常数据、事件、操作也可以平滑巧妙地降级

    (4)简单性

    (5)适应性:构件具有良好的可扩展性

    (6)清晰性

     

    二、软件设计的基本原理

    (一)模块化

    1.模块

    • 由一个总体标识符来代表的,包含输入/输出、逻辑处理功能、内部信息以及运行计划的语句集合
    • 模块是构件的一种形式,eg:过程、函数宏、子函数
    • 特点:接口、功能、逻辑(功能的实现方法)、状态(运行环境和调用关系)

    2.模块化

    • 将软件系统划分为可独立命名、单独访问的模块,每个模块具有特定的功能属性,模块集成到一起即可构成满足用户需求的软件系统
    • 可提高代码的可使用、可重用、可理解性;简化软件维护

    3.Merey标准-->如何分解、模块大小如何设计

    • 模块可分解性
    • 可组装性
    • 可理解性:不参照其他模块可单独理解
    • 连续性:修改软件模块时只对少数模块进行修改,且修改后不影响整体功能
    • 保护性:模块出现错误异常时只影响自身

     

    (二)抽象

    1.抽象方法:从考虑的问题出发,撇开事物现象的、外部的、偶然的东西,抽出事物本质的、内在的、必然的东西,从空间形式和数量关系上揭示客观对象的本质和规律。

    2.软件生命周期过程中每前进一步都是对软件抽象层次的进一步细化。抽象的最低层次是源程序代码。

    3.两种常用的抽象手段:

    • 过程抽象-->任何一个完成明确功能的操作都可被当做单个实体
    • 数据抽象-->定义数据类型和对该类型的操作、限制对象值的范围

     

    (三)逐步求精

    1.是一种自顶向下的设计策略,逐步细化问题的实质和细节,最终完善地解决问题

    2.在软件设计中,逐步求精就是把软件设计中的问题按照优先级和层次进行排队,并逐步对各个问题进行解决

    3.抽象和逐步求精是互补的过程,层次结构的上一层是下一层的抽象,下一层是上一层的求精

     

    (四)信息隐藏

    1.信息隐藏:模块内的数据和过程对不需要这些信息的模块是不能进行访问的

    2.使模块更具有独立性;使软件维护相对容易

     

    (五)模块的独立性

    1.模块独立性:每个模块只完成系统要求的独立子功能,在数据和信息交互与其他模块没有或者极少关联

    2.具有独立性的模块容易开发-->功能分隔彻底使得接口简单  容易测试和维护-->错误传播的范围小

    3.衡量独立程度的度量:耦合 内聚 -->目标:高内聚 低耦合

    4.耦合-->软件系统内部不同模块之间的相互关联程度的度量,耦合的强弱取决于模块间接口的复杂程度、调用模块的方式、组件间通信接口方式

     

    (1)非直接耦合

    模块具有完全的功能上的独立性,模块之间不存在数据信息传递,仅依靠调用关系实现软件功能

    (2)数据耦合

    模块间的调用关系通过传递数据实现 eg:函数输出值的传递

     

    (3)特征耦合

    一个模块向另一个模块传递非全局的数据结构

    (4)控制耦合

    模块间不仅传递数据,还传递对运行过程有影响的控制信号

    使一个模块的执行直接影响到接受控制信号模块的运行

    (5)外部耦合

    一组模块均访问同一个全局简单变量 eg:extern型的外部变量

    (6)公共耦合

    多个模块共同引用公共数据环境(全局数据结构、共享通信区、内存公共覆盖区、介质上共享文件)

    (7)内容耦合

    一个模块直接修改、操作另一模块的内部数据,或者直接转入另一个模块

     

     

    5.内聚-->模块内部数据和过程等信息之间的紧密程度。各元素联系越紧密,内聚性越高。

    (1)偶然内聚

    模块内各处理元素之间没有任何关系,对其修改需谨慎

    (2)逻辑内聚

    逻辑相关的功能被放在同一模块中,eg:一个模块读取各种不同类型外设的输入

    逻辑内聚模块各元素在功能上并无关系

     

    (3)时间内聚

    模块完成的功能必须在同一时间内执行,功能只因为时间因素关联在一起。Eg: 系统初始化

    (4)过程内聚

    模块内各个元素必须按照一定的顺序执行,主要与程序的执行过程有关,而与功能无关   Eg:主模块

    弱点:超越了模块的功能界限-->可能包含某一级模块的功能,同时包含更低层模块的功能

    (5)通信内聚

    模块内所有处理元素都在同一数据结构上操作   Eg:事务处理系统

    (6)顺序内聚

    各处理元素都密切相关与同一功能,且必须按照顺序执行

    弱点:模块完成多个功能或部分功能-->模块功能不单一

    (7)功能内聚

    模块内所有元素共同完成一个功能,缺一不可

    好处:界面清晰、容易理解,复用性较好

     

    启发式设计规则(不属于普遍遵循的原理)

    1.改进软件结构提高模块独立性:通过模块分解/合并-->降低耦合 提高内聚

    2.模块规模适中

    3.深度、宽度、扇入、扇出合理

    • 深度:软件结构中控制的层数,粗略表示一个系统的大小和复杂程度
    • 宽度:软件结构中同一层次上模块总数的最大值,宽度越大系统越复杂
    • 扇入:直接调用当前模块的上级模块数目,扇入越大表明模块的使用效率越高

    • 扇出:一个模块直接控制的模块数目,扇出过大意味着模块过分复杂

    • 模块扇出过大时,可以增加中间层次的控制模块

     

    4.模块的作用域应该在控制域内

    作用域:受该模块内的判定影响的所有模块的集合

    控制域:模块本身及其所有直接或间接从属与它的模块的集合

    所有受判定影响的模块都从属于做出判定的模块

    5.力争降低模块接口的复杂程度

    6.设计单入口单出口的模块

    7.模块功能可以预测-->输入数据相同时输出相同

     

    三、软件体系结构设计

    1.软件体系结构的概念

    • Dewayne Perry、Alex Wolf

    具有一定形式的结构化元素,即构件的集合,包括处理构件(对数据加工)、数据构件(被加工的信息)、连接构件(组合连接不同部分)

    • Mary Show 、David Garlan

    处理算法与数据结构之上关于整体系统结构设计和描述方面的一些问题,eg:全局组织和全局控制结构、关于通信 同步 与数据存取的协议

    • Kruchten

    概念角度-->系统的主要构件及其之间的关系

    模块角度-->功能分解与层次结构

    运行角度-->描述系统的动态结构

    代码角度-->代码和库函数在开发环境中的组织

    • Bass 、Cements、Kazman

    一个程序/计算机系统的软件体系结构包括一个/一组 软件构件、软件构件外部可见特性(构件提供的服务、性能、特性、错误处理、共享资源的使用等)、及其相互关系

    • 整理

    软件体系结构为软件系统提供了一个结构、行为、属性的高级抽象

    由构成系统的元素的描述、元素的相互作用、指导元素集成的模式、模式的约束组成

    指定了系统的组织结构和拓扑结构,显示了系统需求和构成系统的元素之间的对应关系

     

    2.软件体系结构的重要性

    • 是软件风险承担者沟通的手段
    • 突出早期设计决策的选择,对后续的设计实现以及最终成功产生直接影响
    • 具有可复用性

     

    3.软件体系结构风格

    定义了用于描述系统的术语表和一组指导构件系统的规则

    软件体系结构设计的核心问题-->能否到达软件体系结构级别的软件重用

    • 分层体系结构

    (1)系统被组织成一个层次结构,每一层高度内聚并为上层服务。每一层只对相邻的层可见,上层通过下层提供的接口调用下层的功能-->松散耦合的结构模型

     

    (2)优点

    • 支持基于抽象程度递增的系统设计:开发设计人员在设计某一层时只需关注该层使用的技术及其功能
    • 支持功能增强:功能改变最多影响相邻两层,便于系统功能的扩展
    • 支持重用:提供的服务接口不变时,同一层的不同实现可以交换使用

    (3)缺点

    • 并不是每个系统都能容易划分为分层的模式
    • 难以找到合适、正确的层次抽象方法
    • 系统进行数据传输时需要经过多个层次-->性能和效率的下降
    • 程序调试相对困难

     

    • C2体系结构风格

    (1)一系列相互协作的、由连接件连接起来的构件

    构件相对独立,构件之间的通信通过以连接件为中介的异步消息交换机制实现,构件可将任意复杂的功能封装在一起。

    (2)遵守的规则

    • 组织规则-->结构构建以构件、连接件为基础

    • 通信规则-->构件间通信必须通过消息实现
      • 构件的顶端域:可以对哪些通知做出响应、可以发出哪些请求
      • 构件的地段域:可以向下层发送哪些通知,可以响应下层哪些请求
      • 只感知层次高于自己的构件提供的服务

     

    • C/S体系结构风格

    (1)客户机、服务器是两个独立的逻辑系统,服务器负责数据管理,客户机负责数据显示、用户交互和逻辑处理

    (2)两层C/S体系结构的组成

    • 客户机程序:包括用户界面、业务处理程序;负责向服务器发送请求消息、接收和分析从服务器返回的数据
    • 服务器程序:包括数据库、数据查询、数据存储、数据更新程序;负责管理客户机程序的数据、调度管理、事务处理计算、共享资源管理
    • 二者的关系
      • 用户通过客户机的用户交界面提出操作请求,客户机的请求把用户的操作转换成通信协议要求的表达方式。通过服务器在客户机的代理,客户提出操作请求并获得服务器返回信息。
      • 服务器端的服务器接口提供客户机与服务器联系的标准

     

    (3)优点

    • 客户机、服务器构件位置透明,利于分布式数据组织
    • 可分别运行在不同的操作系统之上,便于异构平台的不同开发技术的融合匹配
    • 构件之间充分隔离并彼此独立-->软硬件环境具有极大的灵活性,具有良好的可扩展性

    (4)缺点

    • 开发成本高:软硬件配置要求比较高
    • 客户机程序设计复杂
    • 数据安全性不好:客户端可以直接访问数据库服务器
    • 单一服务器且以局域网为中心,难以扩展至大型企业广域网、Internet
    • 维护和升级成本高

     

    • 三层C/S体系结构风格

    (1)组成

    表示层负责处理用户的输入和向客户的输出,用于系统和用户之间的交互;功能层负责建立数据库连接,根据用户的请求生成访问数据库的SQL语句,并把结果返回给客户机;数据层负责实际的数据库存储和检索,响应功能层的数据处理请求,并将结果返回给功能层。

    • 表示层:系统和用户间的接口,实现系统与系统应用之间的对话
    • 功能层:负责处理具体的业务逻辑
    • 数据层:负责对数据库数据的读写操作

    (2)优点

    • 合理划分三层结构的功能-->逻辑上保持相对独立,系统的逻辑结构更清晰
    • 更灵活、有效地选用相应的平台和硬件系统
    • 各层可进行自主语言的选择并且 可以并行开发
    • 充分利用功能层隔离表示层和数据层,增强数据安全性

     

    • B/S体系结构风格

    (1)是三层C/S结构的一种实现方式,由浏览器、Web服务器、数据库服务器组成

    (2)优点

    • 系统维护和升级方式简单:主要工作在服务器端,客户端不需要维护
    • 成本低,选择多:服务器可以选择多个操作系统,客户机可以选择多个浏览器

    (3)不足

    • 缺乏对动态页面支持能力,没有集成有效的数据库处理能力
    • 系统扩展能力差,安全性难以保障
    • 数据查询等的响应速度低于C/S

     

    • 正交体系结构风格

    (1)正交体系结构风格是一种由组织层和线索组成的层次化结构

    每一个组织层都包含具有相同抽象级别的构件

    线索:不同的功能模块,由完成不同层次功能的构件通过相互调用来组成,每一条线索完成整个系统中相对独立的一部分功能

    完全正交:线索之间无关,同一层的构件之间不存在调用关系

    (2)特征

    • 正交体系结构由完成不同功能的n个线索组成,n>1
    • 系统有m个不同抽象级别的层次,m>1
    • 线索之间保持相对的独立性(正交性)
    • 公共顶层-->驱动线索的运行;公共底层-->为线索提供公共的构件和使用数据

    (3)优点

    • 结构清晰,容易理解-->线索功能相互独立,不进行相互调用
    • 易修改,可维护性强-->变更局部化,缩小了变更范围,减少了修改的工作量
    • 可移植性强

     

    • 数据共享体系结构风格(仓库风格)

    (1)包含两种构件:中央数据结构(资源库)-->表示系统当前的状态;独立构件的集合-->对中央数据结构进行操作

    (2)根据中央数据单元和构件之间信息交换方式的不同:

    • 根据输入事务选择何种处理
    • 由中央数据结构的当前状态决定何种处理-->黑板体系结构

     

    • MVC体系结构风格

    (1)为需要为同样数据提供多个视图的应用程序设计,实现了数据层与表示层的分离,适合开发与GUI有关的应用程序

    (2)组成

    • 模型:维护数据并提供数据访问方法
    • 视图:绘制模型的部分数据或所有数据的可视图
    • 控制器:进行事件的处理

    (3)优点

    • 多个视图可以对应一个模型-->可减少代码复制和维护的工作量
    • 降低各层间的耦合,提供了应用的可扩展性
    • 更符合软件工程化管理的精神-->不同的层各司其职

    (4)问题

    • 增加了系统结构和实现的复杂性
    • 视图与控制器的连接过于紧密
    • 视图对模型数据的访问效率低

     

    • 异构体系结构的集成

    多种体系结构并存并相互融合,eg:B/S C/S体系结构的组合

    • “内外有别”
      • 企业内部人员利用C/S架构通过局域网访问企业数据库,可提高系统查询和修改的响应速度
      • 外部通过B/S架构从Internet上通过Web服务器浏览企业内部数据库,保证数据库的安全,但响应速度慢
    • “查改有别”
      • 对数据库浏览查询:采用B/S
      • 对数据库维护修改:采用C/S

     

    4.软件体系结构设计方法 

    • 工件驱动的软件体系结构设计方法

    (1)软件过程每经历一个阶段,就会发生一次知识转换的过程,最终编码人员把知识固化在软件产品中。

        软件成型前,知识的主要载体是文档和模型-->工件

    (2)过程

     

    • 用例驱动的软件体系结构设计方法

    (1)用例建模:使用用例描述系统需求的过程

        用例模型:所有用例组合在一起,描述系统的全部功能,获取系统的功能需求

    (2)迭代构建软件体系结构

    • 根据软件领域范围建立临时的软件体系结构
    • 选取重要的用例,使体系结构支持用例
    • 选取更多用例,建立更加完美的体系结构
    • 每次迭代,选取并实现一组用例-->确认体系结构,每次迭代结束时进行评估

    (3)软件开发项目分成如下几个阶段:

    • 初始阶段:设定产品功能范围,建立初始业务案例,从业务角度表明项目的可行性
    • 细化阶段:建立体系结构基线,捕获大多数需求
    • 构造阶段:开发系统,保证产品可移交给客户,即产品达到最初的可操作能力
    • 移交阶段:却被得到准备向用户社团发布的产品

    体系结构主要是在细化阶段的迭代过程中发展起来的

     

    • 模式驱动的软件体系结构设计-->从模式导出体系结构抽象 

     

    • 领域驱动的软件体系结构设计DSSA

    (1)基本思想

    • 对具体领域的一系列相似系统可重用信息进行识别、提取、收集和组织
    • 对可利用信息进行整理和再加工-->规范化 标准化,有利于重用
    • 软件体系结构模型的建立参考并使用规范化可重用信息
    • 是多系统范围内的体系结构,从一组系统中导出

    (2)设计过程

     

    • 需求驱动的软件体系结构设计方法

    描述解决的问题和解决方案之间的动态关系

     

    (1)问题空间:定义所解决的问题

    (2)需求分析前期阶段:理解问题,考虑组织和非功能需求;后期阶段:描述系统的相关功能和属性

    (3)体系结构设计

    根据组件或者子系统之间的数据、控制及其他依赖关系描述系统全局结构设计;

            1)把体系结构看做抽象的组件通过连接交互的整体,基于细化的需求模型,确定组件满足的非功能需求和功能需求(用场景表示)

    2)通过描述组件和连接的抽象属性,得到软件体系结构的抽象模型;

    3) 从需求分析模型确定的解决空间中发现体系结构设计方案,得到具体的体系结构实例;

    4)进行评价-->在选定解决方案的同时建立场景模型。

     

    四、系统设计方法(实现设计模型的手段和方法) 

     (一)程序流程图

     1.基本符号

     2.控制结构

    3.存在的问题

    (1)表示程序控制流程的箭头不受任何约束,容易造成程序控制结构的混乱;

    (2)难以描述逐步求精的过程,导致过早考虑细节而忽略全局;

    (3)只描述执行过程,难以表示数据结构;

    (4)符号繁多,记忆不便

     

    (二)盒图(N-S图)

    1.基本控制结构

     2.在N-S图中,每个处理步骤(语句或者语句序列)使用一个盒子表示;盒子可以嵌套另外一个盒子;只能从盒子上边进入、下边走出,限制了随意的控制转移。

    3.优点

    (1)形象直观,具有良好的可见度,容易理解设计意图,为编程、复查、选择测试用例、维护带来了方便

    (2)强制设计人员采用结构化程序设计方法进行思考并描述设计方案,有效保证了设计质量

    (3)简单 易学 易用

    (4)容易表现嵌套关系并且不限制嵌套深度

    4.问题:手工修改麻烦

     

    (三)问题分析图(problem analysis diagram, PAD)

    1.PAD是面向高级程序设计语言设计的,使用二维树形结构表示程序的控制流

    2.基本符号

     

    3.图例

    4.优点

    (1)更容易表示结构化程序控制图。

    (2)程序层次增加,PAD向右延伸,每增加一个层次,向右扩展一条竖线。竖线的总数就是程序的层次数量。

    (3)表现程序逻辑易读易懂-->程序从图中最左竖线的上端节点开始执行,自上而下、自左向右遍历所有结点。

    (4)可以使用工具软件自动转换成高级语言源程序。

    (5)支持自顶向下、逐步求精的方法。

     

    (四)HIPO图(Hirearchy plus input/processing/output)

    1.表示软件系统结构的设计工具

    H图-->描述软件模块层次结构

    IPO图-->描述每个模块的输入、输出数据、处理功能、模块调用的详细情况

    HIPO图是以模块分解的层次性以及模块内输入、处理输出三大基本部分为基础构建的

    2.H图说明软件系统由哪些模块组成以及其控制层次结构

    3.IPO图描述模块输入、输出和处理细节,以及与其他模块间的调用和被调用关系

    (五)判定表

    1.判定表是分析和表达多逻辑条件下执行不同操作情况的工具

    适合:某些操作的实施依赖多个逻辑条件的组合,即针对不同的逻辑条件组合值,分别执行不同的操作。

    2.例子

     

    3.判定表的组成

    (1)条件桩-->问题的所有条件

    (2)动作桩-->问题规定可能采取的操作

    (3)条件项-->在所有可能情况下的真假值

    (4)动作项-->在条件项的各种取值情况下采取的动作

     

    4.判定表的建立

    (1)确定规则个数,对于n个条件,有2n种规则

    规则:一个条件组合的特定取值以及相应执行的操作称为规则,判定表中贯穿条件项和动作项的一列就是一条规则

    (2)列出所有条件桩、动作桩

    (3)填入条件项

    (4)填入动作项

    (5)合并相似规则

     

    (六)判定树

    更加直观表示逻辑判断问题

    树根:加工明

    中间:各项条件

    最右侧:行动

     

    (七)过程设计语言(Process design language,PDL)

    1.用于描述模块中算法和加工的具体细节,具有严格的关键字外部语法,用于定义控制结构和数据结构

    2.语法包括外层语法、内层语法

    外侧语法:描述程序的结构,采用与一般编程语言类似的关键字

    内层语法:描述操作,采用任意自然语句

    3.优点

    (1)可以作为注释插入源代码-->促使维护人员在修改程序的同时修改PDL注释,保持文档和程序的一致性

    (2)易于被计算机处理和存储

    (3)可以自动产生程序

     

    (八)Jackson图

    1.是面向数据结构的设计方法,即以数据结构作为程序设计的基础

    2.基本结构

    (1)顺序

     

    (2)选择

     

    (3)重复

    3.改进-->增加判定条件

     

    4.Jackson方法-->构建Jackson图

     

    (1)确定输入数据和输出数据的逻辑结构

     

    (2)找输入数据、输出数据结构中有对应关系的数据单元

     

    (3)导出Jackson图

    针对有对应关系的,在相应层次画处理框

    输入数据中剩余的数据单元,在相应层次画处理框

    输出数据中剩余的数据单元,在相应层次画处理框

     

    (4)列出操作和条件 使用伪代码表示程序

     

    五、用户界面设计

    1.设计原则

    (1)以用户为中心的可视性原则

    系统的设计决策结合用户的工作和应用环境,理解用户对系统的需求,同时给出可视性效果良好的界面设计

    (2)一致性原则

    系统内部具有相似的界面外观、布局、相似的人机交互方式以及信息显示格式

    (3)交互性原则

    体现系统的状态反馈信息(用户在人机操作过程中,用户从软件系统得到的信息),并对人的操作进行适当的反应

    (4)重要性原则

    按照管理对象在控制系统中的重要性和全局性水平,设计人机界面的主次菜单、对话窗口的位置和凸显性

    (5)功能原则

    设计分功能区多级菜单、分层提示信息、多项对话框并举的窗口

    (6)合理性原则

     

    2.设计过程

    (1)创建系统需求功能的外部设计模型

    设计模型考虑软件的数据结构、总体结构、过程性描述

    需要充分了解不同类型用户的详细情况、基本需求

    (2)确定完成此系统功能的人、计算机分别完成的任务

    (3)构建人机界面原型

    (4)评估界面设计

     

    3.设计方法

    (1)迭代设计

    初步设计-->创建第一级原型-->用户试用并评估-->根据修改意见设计并实现下一级原型

    (2)以用户为中心

    使用户充分理解设计者的指导意图,正确进行实验操作;设计者从使用者那里得到有效的反馈信息以改进界面,二者有效地实现双向互动

     

    展开全文
  • 从0到1设计高可用数据对账系统

    千次阅读 2019-05-16 18:27:27
    一、业务系统设计概述 1、什么是业务系统 ...C端系统偏重用户体验,强调感性,持续的数据分析优化,同一按钮不同的摆放位置都要精心设计、论证,服务对象是个人;B端系统偏重流程、模块化,...

    一、业务系统设计概述

    1、什么是业务系统

    互联网公司常常将产品方向分为两类,C端和B端,C端主要是面向客户和消费者的系统,B端的范围则相对模糊,给供应商或商家使用的系统,给内部业务人员使用的系统,都统称为B端系统。C端和B端系统建设的出发点和侧重点完全不同。C端系统偏重用户体验,强调感性,持续的数据分析优化,同一个按钮不同的摆放位置都要精心设计、论证,服务对象是个人;B端系统偏重流程、模块化,强调抽象和结构性,讲究整体的规划和体系设计,服务对象是组织和机构。
    如果将B端系统进一步拆分,也可以分为两类,第一类是商家端,常见于双边模式的平台型互联网公司,例如淘宝的卖家管理系统,美团的商家管理后台;第二类是内部业务系统,支持企业经营、管理、业务运转。

    • 常见的业务系统包括ERP(EnterpriseResource Planning),CRM(CustomerRelationship Management),SCM(Supply ChainManagement),WMS(WarehouseManagement System),TMS(TransportationManagement System),OA(Office Automation),HRM(Human ResourceManagement)等等。
    • 从软件学的角度来看,所有软件系统分为两类,第一类是能够实时产生业务数据的系统,叫做OLTP(Online TransactionProcessing)系统,第二类是对数据进行加工、处理、探查、挖掘、展现的系统,叫做OLAP(Online AnalyticalProcessing)系统

    总体来讲,业务系统对企业具有四点价值:提升管控能力、控制经营风险、降低运营成本、提升销售业绩。

    2、设计业务系统重要性

    针对不同企业强调的业务重点不一样,那么系统的业务的定制化特定化就是非常重要的。

    3、如何设计一套业务系统

    一般来讲,一套业务系统从0到1的构建,需要经历如下环节。
    在这里插入图片描述
    (1)业务方案设计
    PM和业务负责人一起梳理、制定业务流程、制度、机制,理解业务的问题点,并确定软件系统解决方案。
    (2)系统整体方案设计
    PM结合业务诉求与目标,完成系统概要设计,包括界定业务、系统的边界,系统功能的抽象和演进蓝图,整体应用架构的设计,如何与公司已有系统拼接、交互。
    (3)系统细节方案设计
    PM完成细节方案的所有设计,包括建模、角色、界面、权限等。其中建模是最难的部分,建模好坏决定了系统未来的灵活性、可扩展性。建模要求对业务的全面理解,极强的抽象归纳能力。
    (4)实施验收
    PM对最终项目落地负责,系统上线后要展开持续的迭代优化,深度参与产品运营,数据分析等。
    如果是从无到有设计系统,以上环节必须全面贯彻,尤其是架构设计和模型设计,是重中之重。

    以上内容参考来源:
    http://www.woshipm.com/pd/586436.html
    https://36kr.com/p/5105245


    四、数据对账系统

    我们要设计的属于业务系统中的重点内容:数据对账,数据对账一般应用于支付系统,资金系统双方保持一致是非常重要的。而对于其他系统对于交互核心数据也是非常重要的,所以在这里我们需要从架构方面去设计一个高可用的数据对账系统。

    什么是资金对账?

    • 在会计上的概念:指为了保证账簿记录的正确性而进行的有关账项的核对工作,做到账证相符、账账相符、账实相符。
    • 在支付机构的概念:资金对账,在对账中心进行,将系统保存的账务流水与银行返回的清算流水和清算文件进行对账,核对系统账务数据与银行清算数据的一致性,保证支付机构各备付金银行账户每日的预计发生额与实际发生额一致。即核对银行实际清算资金如充值、充退、提现等业务的银行处理结果是否一致。

    对账中心的作用?

    • 是主要处理对账的系统模块,主要业务是清算对账。对账中心部署于工作平台,分别接受会计系统和清算系统的数据输入进行对账处理。
    • 对账中心最主要的职责是勾兑银行清算流水与支付系统入账流水,用以检查反映银存实际账户的余额变化与支付系统内部户余额变化是否平衡。对于已经核对无误的银行清算流水和支付系统入账流水,分别进入相应的历史银行流水库和历史入账流水库。
    • 对于勾兑结果中银行清算流水多于系统入账流水的,而操作人员不明确资金的来源,需要根据所设定的分类规则将暂不明确的资金进行挂账处理。而后我们认为该部分资金已经系统入账,可以入历史流水库。
    • 因为此时的银存实际账户的余额增加,与之对应的是支付系统内部户余额也增加了,比如: T 日的挂账可能会在 T+N 日后进行销账确认,而后续的销账行为是对明细流水的业务分流处理,我们不应将 T+N 日的销账所产生的账务流水作为入账流水,不再需要到对账中心体现。

    现在从支付到引申类比其他数据对账系统(参考资料)
    其他参考资料关于支付系统:资料1资料2根据现有我们的系统进行系统之间的数据对账,以下为重点内容,由于有时候公司没有那么多财力和人力提供支持,所有的role都需要研发一个人来解决,所以这里我的角色是从业务方,PM,产品经理,架构师,研发,测试方面去一一解决。

    (1)业务方案设计

    业务背景(业务调研):联合营销项目主要围绕大促活动跨店铺,跨自营/商家,打标,优惠券,单品促销,大促盘货等活动的创建和收品,以当前的打标活动收品量1个亿的数据,同步给下游促销系统或者促销收品量上亿的数据同步给下游系统,这个过程中数据量大,持续时间周期长,就不得不需要保证双方系统之间的数据幂等性。之前出现过因为网络抖动,以及没有兜底数据造成的数据丢失和未同步给下游系统情况。

    业务方案:目前业务核心系统处理逻辑方案-》同步下游数据,同步成功实时更新本系统数据状态,并插入日志表一条同步数据,失败数据会同步至ES。由于分布式系统,事务比较复杂,目前依赖于异常和MQ重试机制,容易出现的结果,垃圾数据和数据不一致未能及时发现并做出有效方案解决。考虑目前的情况需要进行数据对账,独立扩展于辅助核心系统的数据稳定性,并实现脱离现有业务核心系统。

    (2)系统整体方案设计

    1. 对账内容和数据来源
    • 对账内容:主要是本系统和下游系统的sku商品数据是否一致。
    • 数据来源:本系统数据库表调用下游系统发送数据,
      本系统调用下游系统实时返回数据。
    1. 对账业务流程
      在这里插入图片描述
    2. 对账中心主要功能
      在这里插入图片描述
      Tips:
    • 1、入账接收:
      联合营销核心业务系统收品SKU信息发送MQ(redo)–》数据对账系统监听消费–》存储jimdb
    • 2、数据存储:
    • jimdb(redis)存储作为清算池,核对diff入账和出账数据,并校验。
    • 弹性数据库JED(MySQL),作为校验后的结果流水对账日志存储
    • 3、出账接收:
      联合营销核心业务系统实时调用促销系统返回结果信息发送MQ(done)–》数据对账系统监听消费–》存储jimdb
    • 4、数据清算:联合营销活动分三类触发清算事件
    • 日常清算:日常大促收品并按照规则进行同步,时间充足。活动开始前24h进行清算事件触发。
    • 限时清算:主要应对收品量小于千万,时间限制8h左右的情况。活动开始前5h进行清算事件触发。
    • 紧急清算:主要应对收品量具大但是由于管理员忘记或者其他原因未能提前发布,品量大于千万级别。活动开始前12h进行清算事件触发。
    • 5、异常预警:
      数据对账系统进行清算入账数据和出账数据,对比结果不一致,异常预警邮件和短信通知研发,并进入审核节点。对比结果一致,接入数据存储,作为流水日志存储。
    • 6、审核流水:
      研发收到报警,进入审核节点根据活动和异常sku信息定位数据不一致原因,根据预警和人工介入排查信息定位是否需要同步业务方和产品,或者从新跑数据调用同步促销系统。
    • 7、数据展示:
      根据流水日志存储,进行数据展示界面,提供数据分析给产品和研发更好的保障系统数据的安全性。
    1. 对账流程图
      在这里插入图片描述
    2. 对账中心功能模块分析
    • Q1:
      清算策略执行,异常预警,人工审核,重新跑数据时间周期多久?是否有足够的时间可控范围内
      A1:
      目前需要预估数据,根据jimdb运维反馈,单个key的数据比对不要超过5000,如果2亿数据,需要比对40w次,性能时间未能预估,需要压测执行参考性能。
    • Q2:
      数据对账系统的可用性
      A2:
      设计初衷,数据对账不止同步sku数据,其他所有系统交互都可以接入数据对账系统,数据对账系统只关心入账和出账比对结果,脱离核心业务系统逻辑,属于扩展系统。
    • Q3:
      数据对账系统的数据安全性
      A3:
      数据对账系统的数据安全性主要依赖于jimdb,通过rdb快照和aof日志恢复数据,但是不能保证100%数据恢复。
    1. 意外数据恢复逻辑
    • 5.1. 意外数据恢复逻辑
      参考上述数据对账系统的数据安全性。
    • 5.2. 对帐及异常恢复逻辑
      通过人工审核,重新跑数据或者及时根据当时情况作出应急措施预案。

    (3)系统细节方案设计
    3.1)项目简化初步排期
    在这里插入图片描述
    3.2)建立资料共享文件夹GitHub或者SVN(持续交付和资料共享):
    在这里插入图片描述
    (4)实施验收

    展开全文
  • IT:银行类金融科技岗笔试习题集合—四个模块包括【综合知识+EPI+英语+个性测评】 导读:行测、综合知识、英语和性格测试。综合知识,包括货币学、金融、会计、计算机等内容。  行政能力测试,内容大家可以参考...
  • 总体设计的基本目的就是回答“概括地说,系统应该如何实现”这问题,因此,总体设计又称为概要设计或初步设计。 一、设计过程 1.总体设计过程通常由两主要阶段组成: (1)系统设计阶段:确定系统的具体实现方案...
  • 领域驱动设计DDD白话文解释战略设计战术设计Entitiy(实体)、充血模型和贫血模型ValueObject(值对象)Aggregate/Aggregate Root(聚合/聚合根)Repository(仓储)Factory(工厂)Domain Service(领域服务)需求分析...
  • 大学年零基础自学Java的路线

    万次阅读 多人点赞 2020-09-02 12:14:16
    JAVA的基础也一样重要,面向对象(包括类、对象、方法、继承、封装、抽象、 多态、消息解析等),常见API,数据结构,集合框架,设计模式(包括创建型、结构型、行为型),多线程和并发,I/O流,Stream,网络编程你...
  • 软件设计师——、软件工程

    千次阅读 2021-09-17 10:14:18
    软件是计算机系统中与硬件相互依存的部分包括: 程序。是按事先设计的功能和性能要求执行的指令序列; 数据。是程序处理、加工的对象和处理信息的数据结构; 文档。是与程序开发、维护和使用相关的各类资料总称。...
  • 数据库设计

    万次阅读 2021-09-14 09:58:39
    数据库设计是指对于一给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构, 并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据操作要求。...
  • 软件工程导论—总体设计

    千次阅读 多人点赞 2020-05-08 16:21:53
    1. 设计过程 2. 设计原理 3. 启发规则 4. 描绘软件结构的图形工具 5. 面向数据流的设计方法
  • 一篇“从入门到上手”的PCB设计教程

    万次阅读 多人点赞 2019-05-16 14:43:23
    一篇“从入门到上手”的PCB设计教程 这是一篇面向神马都不懂的小白玩家的PCB设计教程。希望能帮助大家快速上手PCB的设计。 1 预备知识 1.1 常用工具 (1)做图工具:Altium Designer (2)PCB板加工:嘉立创 (3)...
  • 软件开发生命周期的四个阶段

    万次阅读 2017-12-13 13:58:44
     规划阶段是理解为什么要建立一信息系统以及确定如何建设的基础。规划阶段由两步骤: 1. 项目启动期间,系统对于组织的业务价值已经被确认:如何降低成本或增加收入?大多数新系统的想法来自于在IS区域以外...
  • 一般而言,存货业务包括到货处理、保管和发放三主要部分。通畅的业务流程是保障高效库存管理的基础,应具备优化、无冗余、并行作业的基本属性。 2科学的组织结构 科学的组织结构确保了业务流程的高效执行,明确了...
  • 详细设计说明书

    万次阅读 多人点赞 2019-06-22 23:08:06
    目的是对该项目进行详细设计,在概要设计的基础上进一步明确系统结构,详细地介绍系统的各个模块,为进行后面的实现和测试做准备。本详细设计说明书的预期读者为本项目小组的成员以及对该小程序感兴趣,在以后想对...
  • 软件工程:总体设计

    千次阅读 多人点赞 2020-10-21 21:31:47
    总体设计的基本目的就是回答“概括地说,系统应该如何实现”这问题,因此,总体设计又称为概要设计或初步设计。 总体设计阶段的另一项重要任务是设计软件的结构,也就是要确定系统中每程序是由哪些模块组成的,...
  • 1小时学会不打代码制作一网页精美简历(1)

    万次阅读 多人点赞 2021-05-13 22:39:48
    1_bit:我们可以看圆角位置,如果全部为橘色则表示这个图片的四个角都将受到边框圆角值的影响。例如此时我将边框圆角的值设为 50,你看看现在的图片会怎样。 小媛:图片的四个角变圆润了耶。 1_bit:对的,边框圆角...
  • 『数据库』怎样设计数据库

    千次阅读 2020-06-13 00:26:18
    数据库设计是指对于一给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构, 并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据操作要求。...
  • 题 目: 多功能智能跟随行李箱控制系统设计 摘要 科技产品不断融入人们的生活,给人们带来了便利。近年来,与人们出行相关的智能跟随行李箱产品不断涌入市场,其丰富的功能和自动跟随特性,在解放了人们双手的同时,...
  • 本文代码实现基本按照《数据结构》课本目录顺序,外加大量的复杂算法实现,一篇文章足够。能换你一收藏了吧?
  • 数据库课程设计 ——酒店管理系统

    万次阅读 多人点赞 2019-05-31 10:36:11
    (2) 关系模式的优化 关系模式room,customer,,manager,customer type,in history,out history不存在非主属性对主属性的部分函数依赖,也不存在传递函数依赖,已经达到3NF 。但worker存在传递函数依赖,优化为...
  • 作为数据库应用系统的重要组成部分,数据库设计的成败往往直接关系到整个应用系统的成败。 以数据库为基础的数据库应用系统与其他计算机应用系统相比往往具有数据量庞大、数据保存时间长、数据关联复杂、用户要求...
  • 文章目录前言一、架构的演变历程二、领域驱动初窥1 传统软件开发中的痛点2 什么是领域驱动设计战略设计战术设计总结3 领域模型4 分层架构模型三层架构层架构六边形架构三、架构设计进阶1 DDD下的项目目录结构2 ...
  • 1、ID(Industry Design)工业设计 包含外观、材质、手感、颜色配搭,主要界面的实现与及色彩等方面的设计。 2、MD(Mechanical Design)结构设计 以手机为例: 前壳、后壳、手机的摄像镜头位置的选择、固定的方式、...
  • 学生成绩管理是学校管理中异常重要的一环节,作为学校,除了育人,就是育知,学生成绩管理的计算机化是整个学校教务管理中的重要一部分,能否实现这一步关系到学校办学整体效率的高低,介与它的重要性,学生成绩...
  • 产品读书《设计心理学1-4》-设计

    千次阅读 2016-12-27 10:58:51
    设计本身没有价值,最重要的是创造 | 造就思想节·Don Norman 61部电影色彩元素大串联《色彩心理学》 作者简介 ...设计心理学1:日常的设计...简单来说,好的设计就是让用户一看就知道这产品的用途,如何正确...
  • 领域驱动设计与模式实战

    千次下载 热门讨论 2012-08-09 17:50:23
    7.7.1 一个初步实现 7.7.2 创建规则类,离开最不成熟的阶段 7.7.3 设置规则列表 7.7.4 使用规则列表 7.7.5 处理子列表 7.7.6 一API改进 7.7.7 自定义 7.7.8 为使用者提供元数据 7.7.9 是否适合用模式来解决此问题 ...
  • 大学年,这Java自习路线,让我现在进了阿里

    万次阅读 多人点赞 2020-02-28 00:23:49
    JAVA的基础也一样重要,面向对象(包括类、对象、方法、继承、封装、抽象、 多态、消息解析等),常见API,数据结构,集合框架,设计模式(包括创建型、结构型、行为型),多线程和并发,I/O流,Stream,网络编程你...
  • 关于课程设计心得体会

    千次阅读 2021-01-30 03:44:57
    课程设计是一把需求分析、程序编写、程序调试、撰写报告结合为一体的过程,那么关于课程设计心得体会,该怎么写?下面是小编整理的课程设计心得体会范文,欢迎大家参阅。课程设计心得体会经过一学期的学习,我对...
  • 机械设计基础课程设计详细步骤(说明书)

    千次阅读 多人点赞 2020-08-21 11:30:17
       本文主要介绍机械设计基础课程设计的详细步骤(其实本文所说的详细的设计步骤就是我当时提交的课程设计说明书的电子版的筛选),给迷茫的小伙伴提供一些思路,博主所学专业为非机械专业,所以某些设计参数有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 48,869
精华内容 19,547
关键字:

初步设计包括四个部分