百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

系统设计难吗?了解几个基本思想,助你快速打开思路

haoteby 2024-12-29 03:21 11 浏览

要进行系统设计,首先需要了解系统设计涉及到什么内容

当我们完成了前期的需求分析后,下一步就涉及到了非常重要的系统设计阶段了,这步的执行好坏程度,决定了后续项目的开发、测试的速度,以及后续的二次、三次开发和运维的难度。这一步在以往的经验来看,主要包含系统简要设计和系统详细设计,主要的区别如下:

  • 系统简要设计:主要是对业务需求中的关联,转换为技术中的不同模块的关联,即在这个阶段,需要做的是根据需求分析将系统按照合适并合理划分为不同模块,确认每个模块需要提供的具体功能。
  • 系统详细设计:基于简要设计,确认每个模块需要提供的功能和接口细节。这个步骤在实际的开发过程中,其实是会不断的修改和优化,具体原因是因为在实际开发中需求和最优的实现方式会有改动,就如其中的接口参数或规范等。

那么如何进行对业务需求进行合理的模块划分呢?标准是什么?

系统设计在历史的进程中,出现大致以下几个关键节点:

  1. 面向过程 -> 面向对象编程 -> 组件化 -> 设计模式
  2. 单体应用 -> 敏捷开发 -> 微服务 -> Serviceless -> ServiceMesh

那么我们可以大致了解到其中的发展规律,其实就是往“高内聚,低耦合”的方向去处理;更加容易多团队协作敏捷开发、改造,功能复用,避免代码冗余,运维更加简化;那么系统的一个合理模块划分大概就是类似的一种标准。但是这个标准不是固定的,需要根据具体情况分析,如在某些情况,冗余的设计对系统也是有很大的收益的。但最终的目的还是要达到“高内聚,低耦合”的模块划分的效果;所以就涉及到这部分的设计思想,方便技术人员更加容易的去将业务更合理的划分不同的模块。

那么在进行系统设计时,有哪些具体的设计思想可以参考呢?

1. 三层架构

三层架构,是以展示层(UI/View)、业务逻辑层或服务层(BLL/Service)、数据访问层/持久层(DAL/Dao)这三层为代表,目的是为了“高内聚,低耦合”。它是一个由外到内的一个垂直分层架构思想。

特点:上层依赖其下层,依赖关系不跨层;层次清晰,分工明确,每层之间耦合度低——提高了效率,适应需求变化,可维护性高,可扩展性高。

  • 展示层:是用于和用户直接接触的一层,只是对展示数据进行处理并返回。
  • 业务逻辑层:实现具体的业务逻辑,并将结果返回上一层。
  • 数据访问层:与数据库交互的一层,所有对数据库CURD都是通过该分层进行操作,并返回到业务逻辑层。

具体落地体现:

以Springboot为例,MVC(Model-View-Controller)架构为展示层,Service\Component组件为业务逻辑层,数据访问层的实现有Mybatis、JPA、Hibernate等

2. DDD(Domain-Driven Design)领域驱动设计

领域驱动设计,是通过领域模型来表达业务领域的概念和规则,强调将业务逻辑放在核心领域层中,以实现高内聚、松耦合的设计。它是一种更注重内部划分的功能模块之间的关联和抽象,个人认为是属于横向架构思想的一种,虽然它也存在分层的概念,但其实其内核主要用于解决的是业务之间横向跨越的关系。

DDD的目标是通过将软件的关注点集中在核心领域上,并通过丰富的领域模型来管理复杂性,从而提高软件的质量和维护性。DDD强调与业务专家的紧密合作,以确保软件解决方案能够准确反映业务需求。通过这种方法,软件开发团队可以创建更加灵活、可扩展且与业务紧密结合的系统。

特点:以四层架构划分

  • 接口层:负责与用户、程序、自动化测试、批处理脚本交互。
  • 应用层:负责对领域层的多个聚合进行协调,通俗地说就是对不同的领域层进行组合编排,但不负责具体的实现逻辑,实现逻辑应该放在领域层。应用服务还可以进行安全认证、权限校验、事务控制、发送或订阅领域事件等。
  • 领域层:实现核心业务逻辑,包含聚合根、实体、值对象、领域服务等领域对象(领域模型),其中的实体采用充血模型(对象的方法和数据不分离,与之对应的是贫血模型)实现;领域服务负责组合聚合内的多个实体来实现复杂业务。
  • 基础层:贯穿所有层,为其他层提供三方工具、驱动、MQ、网关、文件操作、缓存、数据库等基础服务。

注意其中细节的概念,可以自行搜索,本章只说明思想,和具体产生的作用

领域驱动的四层架构,其实和上面提到的三层架构其实并不冲突,其实可以理解为是三层架构的变体或补充,它也满足三层架构的分层,类似接口层为展示层范围、应用层和领域层位属于业务逻辑层,基础层则是涵盖数据访问层,但是它又不只是这些简单分层的概念。

领域建模的方式主要有:

  1. 事件风暴建模
  2. 四色建模法

3. 事件驱动设计

事件驱动主要的核心思想是将系统的各个组件通过事件和事件处理器之间的一系列关系连接起来,使得系统可以灵活地响应外部事件,将系统分解为一系列的独立组件,通过事件驱动设计,去实现模块化,高度解耦和可扩展性。通过异步通信,使用事件通道,实现事件的分发和多个消费者的并行处理。

  • 组成部分:事件源、 事件处理器、 事件通道、事件消费者。
  • 优势:实时响应、可扩展性高、容错性高、灵活性高,吞吐量高
  • 实现场景:消息队列、消息中间件、规则引擎、响应式框架

总结

简单地来说,就是通过三层架构或DDD,对业务进行合理模块的划分,再通过合理的使用事件驱动,将系统进一步性能、扩展性、容错、灵活度提高。

PS:希望这篇文章能为你提供或开拓一些思路,能解决你心里的某些疑惑,希望大家能喜欢)

相关推荐

一日一技:用Python程序将十进制转换为二进制

用Python程序将十进制转换为二进制通过将数字连续除以2并以相反顺序打印其余部分,将十进制数转换为二进制。在下面的程序中,我们将学习使用递归函数将十进制数转换为二进制数,代码如下:...

十进制转化成二进制你会吗?#数学思维

六年级奥赛起跑线:抽屉原理揭秘。同学们好,我是你们的奥耀老师。今天一起来学习奥赛起跑线第三讲二进制计数法。例一:把十进制五十三化成二进制数是多少?首先十进制就是满十进一,二进制就是满二进一。二进制每个...

二进制、十进制、八进制和十六进制,它们之间是如何转换的?

在学习进制时总会遇到多种进制转换的时候,学会它们之间的转换方法也是必须的,这里分享一下几种进制之间转换的方法,也分享两个好用的转换工具,使用它们能够大幅度的提升你的办公和学习效率,感兴趣的小伙伴记得点...

c语言-2进制转10进制_c语言 二进制转十进制

#include<stdio.h>intmain(){charch;inta=0;...

二进制、八进制、十进制和十六进制数制转换

一、数制1、什么是数制数制是计数进位的简称。也就是由低位向高位进位计数的方法。2、常用数制计算机中常用的数制有二进制、八进制、十进制和十六进制。...

二进制、十进制、八进制、十六进制间的相互转换函数

二进制、十进制、八进制、十六进制间的相互转换函数1、输入任意一个十进制的整数,将其分别转换为二进制、八进制、十六进制。2、程序代码如下:#include<iostream>usingna...

二进制、八进制、十进制和十六进制等常用数制及其相互转换

从大学开始系统的接触计算机专业,到现在已经过去十几年了,今天整理一下基础的进制转换,希望给还在上高中的表妹一个入门的引导,早日熟悉这个行业。一、二进制、八进制、十进制和十六进制是如何定义的?二进制是B...

二进制如何转换成十进制?_二进制如何转换成十进制例子图解

随着社会的发展,电器维修由继电器时代逐渐被PLC,变频器,触摸屏等工控时代所替代,特别是plc编程,其数据逻辑往往涉及到数制二进制,那么二进制到底是什么呢?它和十进制又有什么区别和联系呢?下面和朋友们...

二进制与十进制的相互转换_二进制和十进制之间转换

很多同学在刚开始接触计算机语言的时候,都会了解计算机的世界里面大多都是二进制来表达现实世界的任何事物的。当然现实世界的事务有很多很多,就拿最简单的数字,我们经常看到的数字大多都是十进制的形式,例如:我...

十进制如何转换为二进制,二进制如何转换为十进制

用十进制除以2,除的断的,商用0表示;除不断的,商用1表示余0时结束假如十进制用X表示,用十进制除以2,即x/2除以2后为整数的(除的断的),商用0表示;除以2除不断的,商用1表示除完后的商0或1...

十进制数如何转换为二进制数_十进制数如何转换为二进制数举例说明

我们经常听到十进制数和二进制数,电脑中也经常使用二进制数来进行计算,但是很多人却不清楚十进制数和二进制数是怎样进行转换的,下面就来看看,十进制数转换为二进制数的方法。正整数转二进制...

二进制转化为十进制,你会做吗?一起来试试吧

今天孩子问把二进制表示的110101改写成十进制数怎么做呀?,“二进制”简单来说就是“满二进一”,只用0和1共两个数字表示,同理我们平常接触到的“十进制”是“满十进一”,只用0-9共十个数字表示。如果...

Mac终于能正常打游戏了!苹果正逐渐淘汰Rosetta转译

Mac玩家苦转译久矣!WWDC2025苹果正式宣判Rosetta死刑,原生游戏时代终于杀到。Metal4光追和AI插帧技术直接掀桌,连Steam都连夜扛着ARM架构投诚了。看到《赛博朋克2077》...

怎么把视频的声音提出来转为音频?音频提取,11款工具实测搞定

想把视频里的声音单独保存为音频文件(MP3/AAC/WAV/FLAC)用于配音、播客、听课或二次剪辑?本文挑出10款常用工具,给出实测可复现的操作步骤、优缺点和场景推荐。1)转换猫mp3转换器(操作门...

6个mp4格式转换器测评:转换速度与质量并存!

MP4视频格式具有兼容性强、视频画质高清、文件体积较小、支持多种编码等特点,适用于网络媒体传播。如果大家想要将非MP4格式的视频转换成MP4的视频格式的话,可以使用MP4格式转换器更换格式。本文分别从...