系分 - 案例分析 - 系统设计

news2024/11/26 2:45:25

在这里插入图片描述

个人总结,仅供参考,欢迎加好友一起讨论

文章目录

  • 系分 - 案例分析 - 系统设计
  • 结构化设计SD
    • 内聚
      • 偶然内聚
      • 逻辑内聚
      • 时间(瞬时)内聚
      • 过程内聚
      • 通信内聚
      • 顺序内聚
      • 功能内聚
    • 耦合
      • 内容耦合
      • 公共耦合
      • 外部耦合
      • 控制耦合
      • 标记耦合
      • 数据耦合
      • 非直接耦合
  • 补:建模信息系统应用架构
  • 面向对象的设计OOD
  • 结语

系分 - 案例分析 - 系统设计

在这里插入图片描述

结构化设计SD

内聚

模块的内聚类型通常可以分为7种,根据内聚度从高到低排序:

在这里插入图片描述

偶然内聚

偶然内聚的模块内,各个组成部分是很随意地组合到一起。偶然内聚的各个部分之间,除了“恰好放在同一个模块内”之外,没有任何关系。

内聚性最弱、也是最差的一种情况,一个模块内干几件没有相关的事情,无法维护。

逻辑内聚

逻辑内聚是指一个模块内的几个组件仅仅因为“逻辑相似”而被放到了一起,即使这几个组件本质上完全不同。几个逻辑上相关的功能被封装到同一个模块里面,然后由调用函数传入控制的参数来确定调用哪个功能。

缺点:接口不容易理解,因为传入控制参数至就会添加参数说明否则谁知道参数。

时间(瞬时)内聚

当Controller处理Http请求之前,用Filter统一做解密、验签、认证、鉴权、接口日志、异常处理等操作,那

么,解密/验签/认证/鉴权/接口日志/异常这些功能之间就产生了时间内聚。

过程内聚

过程内聚是指一个模块内的多个组件之间必须遵循一定的执行顺序才能完成一个完整功能。

通信内聚

通信内聚是指一个模块内的几个组件要操作同一个数据(例如同一个Dto、同一个文件、或者同一张表等)。

顺序内聚

顺序内聚是指在一个模块内的多个组件之间存在“一个组件的输出是下一个组件的输入”这种“流水线”的关系。

功能内聚

功能内聚是指一个模块内所有组件共同完成一个功能、缺一不可。某个组件只要与模块的功能无关,哪怕它与其它组件之间存在着其它内聚,也必须移走。

耦合

模块的耦合类型通常也分为7种,根据耦合度从低到高排序

在这里插入图片描述

内容耦合

内容耦合是指一个模块直接使用另一个模块的代码,有三种情况:

1、最常见、大概也是最可恶的内容耦合,无疑就是Ctrl+C/Ctrl+V了。

2、不直接使用代码、但是重复实现功能。

3、通过非正常入口而转入另一个模块内部。

公共耦合

公共耦合是指多个模块访问同一个全局数据。当(某个模块或全局数据)发生变化时,这种耦合可能会导致不受控制的错误传播以及无法预见的副作用。公共耦合也叫共享耦合、全局耦合。

外部耦合

外部耦合是指两个模块共享一个外部强加的数据结构、通信协议或者设备接口。外部耦合基本上与外部工具和设备的通信有关。

控制耦合

控制耦合是指一个模块通过传入一个“做什么”的数据来控制另一个模块的流程。结合内聚类型来看,控制耦合对应的就是逻辑内聚。

标记耦合

模块之间通过共享数据结构传递信息,发送方通过参数发送给接收方,接收方只使用一部分。

数据耦合

数据耦合是指模块间通过传递数值来共享数据。传递的每个值都是基本数据,而且传递的值是就是要共享的值。

非直接耦合

不多做解释,很好理解,没有任何关联和联系。

补:建模信息系统应用架构

逻辑DFD

使用逻辑DFD建模过程需求已经是广泛接受的实践,但是从面向分析的逻辑DFD到面向设计的物理DFD的转变一直有点不好理解。我们希望有一种高层次的通用设计,可以用于设计系统的应用架构以及构成系统的过程,简单地说,我们想要有一个蓝图来指导我们走过详细设计和构造阶段,具体包括:

  1. 绘制物理数据流图
  2. 前置条件(如逻辑数据模型、逻辑过程模型)
  3. 网络架构
  4. 数据分布和技术确定(如在不同的服务器上存储特定表的子集)
  5. 过程分布和技术确定(如三层客户/服务器和网络计算系统)
  6. 人/机边界

数据流图(DFD)是一种系统分析工具,用于建模信息系统的逻辑业务需求。物理数据流图建模作为信息系统一部分实现的技术设计决策和人为设计决策,将同那些实际构造和实现系统的人沟通技术选择和其他设计决策。换句话说,物理DFD用作系统构造和实现的技术性蓝图。

物理DFD

物理DFD使用的基本形状与逻辑DFD相同,也就是包括外部实体、过程、数据流和数据存储。但是,物理DFD的每个过程描述的是要计划的实际实现。物理过程是一个处理器(例如计算机或人),或者是要执行的特定工作的技术性实现(如计算机程序或手工过程)。在系统设计过程中,必须说明如何实际地实现在分析阶段形成的逻辑过程。

物理数据流图有以下两个基本要素:

  • 逻辑过程经常被分配到特定的物理处理器,如PC、服务器、人或计算机网络中的基他设备。
  • 每个逻辑过程必须实现成一个或多个物理过程。(原因:将过程分解成人执行的部分和由计算机执行的部分;将过程分解成使用一种技术实现的部分和使用另一技术实现的部分;为了处理例外,或者为了安全需求和审计需求而增加的过程)对应地,为了保持原始数据流的本质不变,就必须相应地增加数据流。

在这里插入图片描述

物理数据流表示了下列内容:

  1. 一个物理过程的输入或输出的计划实现。
  2. 一个数据库的命令或动作,如创建、读取、修改或删除。
  3. 通过网络从另一个信息系统输入数据或者向另一个信息系统输出数据。
  4. 同一个程序中两个模块或子路线之间的数据流。

大多数逻辑数据流将被直接带入物理DFD中,有些可能会被合并成表示业务表格的单个数据流;另一些则可能会分解成多个数据流,作为将逻辑过程分解成多个物理过程的结果;其他一些则可能被复制成使用不同技术实现的多个流。例如,逻辑数据流“订单”可能被实现成以下形式:“表格:订单”、“电话:订单”、“HTML:订单”。

物理外部代理,外部代理从逻辑DFD继续不变地转至物理DFD。按照定义,外部代理在系统分析期间被归类为系统范围以外,所以,它们不应变化。

物理数据存储实现了逻辑数据存储,表示以下内容之一:

  1. 数据库
  2. 数据库中的表
  3. 计算机文件
  4. 重要数据的磁带或介质备份
  5. 程序需要的临时文件或批处理文件
  6. 任意未经计算机处理的文件

面向对象的设计OOD

如同结构化程序设计一样,面向对象设计的两个决定性的目标也是低耦合和高内聚。内聚是对一个类的所有属性和行为相互之间关联的度量。通过争取获得高内聚和低耦合,我们希望每个类主要关注一件事情,而且每个类尽可能地独立。

为了同质量问题做斗争,也为了实现更高层的复用,开发人员开始使用设计模式、对象框架和组件。

  • 设计模式,这里不再赘述。
  • 对象框架:框架是提供一组相关服务的协作类构成的子系统。如果说模式是写在纸上的设计指南,那么对象框架是在程序中实现的并且已经可用的类。一个比较常见的对象框架是用于将对象翻译成关系表(或者反过来)的软件。当你的应用是面向对象的,但你使用的数据库是非面向对象的(如关系数据库)时,就要使用这个框架。
  • 通过使用组件,开发人员可以方便地为其他人封装和分发程序代码。一个组件代表了系统中一个可替换的模块或物理单元(EXE、DLL或数据库)。组件有时称为“超级对象”,但实际上组件包含了一组相关的协作对易用,它们具有一个接口,可以作为一个单元部署。

结语

本章节内容大部分为了补充知识点,大部分的系统设计知识点会以需求分析的方式进行考察,另外一部分句式基于Web的系统设计。

有关Web方面的系统设计,请移步以下连接:
案例分析 - 架构设计(基本)
案例分析 - 系统设计(Web架构)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/167442.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DTO 与 PO的相互转换

目录 常见Bean映射框架 Dozer Orika MapStruct ModelMapper JMapper 测试模型 转化器 OrikaConverter DozerConverter MapperStructConvert JMapperConvert ModelMapperConverter 测试 平均时间 吞吐量 SingleShotTime 采集时间 DTO(Data Transfer …

Android项目Gadle统一依赖管理

一.Gradle管理依赖版本 在中大型Android项目中,都会有多个Module进行协同配合。这些module中可能会依赖同一个库的不同版本,这将导致一些问题,要么是代码冲突,要么是APK包体积增大,亦或是项目构建的时间变长&#xff…

在Revit里如何将普通墙与曲面墙的内壁连接

在Revit里如何将普通墙与曲面墙的内壁连接?创建异形建筑时,为了达到如图1所示的效果,该如何操作; 我们可以使用体量建模的方式来创建该类建筑,要点在于如将幕墙与曲面墙的内壁连接。具体方法如下: 一、创建…

ASP.NET Core+Element+SQL Server开发校园图书管理系统(一)

随着技术的进步,跨平台开发已经成为了标配,在此大背景下,ASP.NET Core也应运而生。本文主要基于ASP.NET CoreElementSql Server开发一个校园图书管理系统为例,简述基于MVC三层架构开发的常见知识点,仅供学习分享使用&a…

ubuntu20.04下出现protoc与gazebo版本问题

ubuntu20protocgazebo问题描述问题定位解决方案问题描述 今天在搞路径规划算法时,从git上拉下来一个算法,ros环境那些都有,但是在编译的时候出现了如下图所示的一下问题:(为了方便搜索关键词) In file incl…

锂离子电池热失控预警资料整理(三)

此前 个人搜集了一些锂电池热失控预警相关期刊、文献,并整理了一些个人认为重要的逻辑、知识点,希望通过此分享让有需要的人了解一些内容,如有问题欢迎同我探讨~ 锂离子电池热失控预警资料整理(三)九、基于数据分析的锂…

C语言基于FOC控制算法和STM32主控芯片的双路直流无刷电机控制器源码

【FOCSTM32】双路直流无刷电机矢量控制器-使用文档 📕 介绍 控制器主控芯片采用STM32F405RGT6,控制器底层基于HAL库和FreeRTOS实时操作系统,预留CAN、USART、SWD、USB接口各一,便于通信和控制的工程应用。该控制器提供双路无刷电…

2022年艺术品和古董投资策略研究报告

第一章 行业概况 艺术品是艺术家智力劳动成果的结晶。作为一种特殊商品流通于艺术市场,与其他商品相同的是,它也具备普通商品的基本属性:使用价值和价值。不同的是,艺术品的使用价值体现在精神层面而不是物质层面上,它…

RabbitMQ消息队列实战(1)—— RabbitMQ的体系

RabbitMQ是一个开源的消息代理和队列服务器,用来在不同的应用之间共享数据。1983年,被认为是RabbitMQ的雏形的Teknekron创建,首次提出了消息总线的概念。中间经历过数个阶段的发展,一直到2004年,AMQP(Advan…

02.指针的进阶

1.字符指针 在指针的类型中我们知道有一种指针类型为字符指针 char* ; 一般使用: int main() {char ch w;char *pc &ch;*pc w;return 0; } char * p---const char * p(因为常量字符串不能被修改) #include<stdio.h> int main() {const char * pstr "hel…

从汇编的角度了解C++原理——虚函数

文章目录1、虚函数1.1、虚函数储存结构1.2、子类重写虚函数1.3、在栈上调用虚函数1.4、在堆上调用虚函数(通过指针调用&#xff0c;多态)本文用到的反汇编工具是objconv&#xff0c;使用方法可以看我另一篇文章https://blog.csdn.net/weixin_45001971/article/details/12866064…

编译基于armV8架构的opencv,并在rock3a开发板上运行

近期在基于arm开发板做图像识别任务开发时&#xff0c;需要用到Opencv库 之前在做rknpu开发时&#xff0c;开发sdk里面已经集成了opencv 但是该opencv开发包不能实现imshow/VideoCapture等函数&#xff0c;经过调研&#xff0c;决定对opencv源代码进行编译&#xff0c;生成arm…

安科瑞能耗监测系统在新疆昌吉市政务中心项目的研究与应用

安科瑞 华楠摘要&#xff1a;大型公共建筑总面积不足城镇建筑总面积的4%&#xff0c;但总能耗却占全国城镇总耗电量的22%&#xff0c;大型公共建筑单位面积年耗电量达到70&#xff5e;300KWh&#xff0c;为普通居民住宅的10&#xff5e;20倍。公共建筑是节能大户和节能核心&…

Delphi 11.2 安装 CnWizards 组件包

官方网址&#xff1a;https://www.cnpack.org/showdetail.php?id900&langzh-cn 开源免费的组件包&#xff0c;大大提高了开发效率&#xff0c;再次感谢大佬们的无私奉献 这个组件包主要是为了实现一些delphi没有的便捷设置&#xff0c;以及能给delphi增加了一些好用的辅助…

惊艳的产品背后,是锐利的设计思维

缘起 几年前&#xff0c;我偶然用一个 叫 Zine 的小app 写了两篇文章&#xff0c;感觉非常好。 后来在网上认识 了Zine 团队的创始人 Louis&#xff0c;也喜欢上了他们的另一个 App&#xff1a;Varlens&#xff0c; 最近他们推出了记笔记的 App Lattics&#xff0c;一些功能也…

《 Unity Shader 入门精要》 第3章 Unity Shader 基础

第3章 Unity Shader 基础 3.1 Unity Shader 概述 材质与 Unity Shader 在 Unity 中我们通常需要将材质&#xff08;Material&#xff09; 和 Unity Shader 配合使用&#xff0c;常见流程如下&#xff1a; 创建一个材质创建一个 Unity Shader&#xff0c; 并将它赋给材质将材…

Android View类

布局定义了应用中的界面结构&#xff08;例如 Activity 的界面结构&#xff09;。布局中的所有元素均使用 View 和 ViewGroup 对象的层次结构进行构建。View 通常用于绘制用户可看到并与之交互的内容。ViewGroup 则是不可见的容器&#xff0c;用于定义 View 和其他 ViewGroup 对…

AppScan自定义扫描策略,扫描针对性漏洞

系列文章 AppScan介绍和安装 AppScan 扫描web应用程序 AppScan被动手动探索扫描 AppScan绕过登录验证码深入扫描 第五节-AppScan自定义扫描策略&#xff0c;扫描针对性漏洞 AppScan安全扫描往往速度是很慢的&#xff0c;有些场景下他的扫描项目又不是我们需要的&#xff0c;…

如何实现六轴机械臂的逆解计算?

1. 机械臂运动学介绍 机械臂运动学 机器人运动学就是根据末端执行器与所选参考坐标系之间的几何关系&#xff0c;确定末端执行器的空间位置和姿态与各关节变量之间的数学关系。包括正运动学&#xff08;Forward Kinematics&#xff09;和逆运动学&#xff08;Inverse Kinemati…

渔业养殖远程监控系统解决方案

传统的水产养殖依靠养殖者的经验进行观察&#xff0c;信息不准确&#xff0c;调控不及时&#xff0c;养殖规模扩大难&#xff0c;人工成本高。除此之外传统水产养殖以个户居多&#xff0c;生产管理方式粗放&#xff0c;个体生产能力不足&#xff0c;养殖产品的品质难以保障。 …