系统设计难吗?了解几个基本思想,助你快速打开思路
haoteby 2024-12-29 03:21 4 浏览
要进行系统设计,首先需要了解系统设计涉及到什么内容
当我们完成了前期的需求分析后,下一步就涉及到了非常重要的系统设计阶段了,这步的执行好坏程度,决定了后续项目的开发、测试的速度,以及后续的二次、三次开发和运维的难度。这一步在以往的经验来看,主要包含系统简要设计和系统详细设计,主要的区别如下:
- 系统简要设计:主要是对业务需求中的关联,转换为技术中的不同模块的关联,即在这个阶段,需要做的是根据需求分析将系统按照合适并合理划分为不同模块,确认每个模块需要提供的具体功能。
- 系统详细设计:基于简要设计,确认每个模块需要提供的功能和接口细节。这个步骤在实际的开发过程中,其实是会不断的修改和优化,具体原因是因为在实际开发中需求和最优的实现方式会有改动,就如其中的接口参数或规范等。
那么如何进行对业务需求进行合理的模块划分呢?标准是什么?
系统设计在历史的进程中,出现大致以下几个关键节点:
- 面向过程 -> 面向对象编程 -> 组件化 -> 设计模式
- 单体应用 -> 敏捷开发 -> 微服务 -> 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、网关、文件操作、缓存、数据库等基础服务。
(注意:其中细节的概念,可以自行搜索,本章只说明思想,和具体产生的作用)
领域驱动的四层架构,其实和上面提到的三层架构其实并不冲突,其实可以理解为是三层架构的变体或补充,它也满足三层架构的分层,类似接口层为展示层范围、应用层和领域层位属于业务逻辑层,基础层则是涵盖数据访问层,但是它又不只是这些简单分层的概念。
领域建模的方式主要有:
- 事件风暴建模
- 四色建模法
3. 事件驱动设计
事件驱动主要的核心思想是将系统的各个组件通过事件和事件处理器之间的一系列关系连接起来,使得系统可以灵活地响应外部事件,将系统分解为一系列的独立组件,通过事件驱动设计,去实现模块化,高度解耦和可扩展性。通过异步通信,使用事件通道,实现事件的分发和多个消费者的并行处理。
- 组成部分:事件源、 事件处理器、 事件通道、事件消费者。
- 优势:实时响应、可扩展性高、容错性高、灵活性高,吞吐量高
- 实现场景:消息队列、消息中间件、规则引擎、响应式框架
总结
简单地来说,就是通过三层架构或DDD,对业务进行合理模块的划分,再通过合理的使用事件驱动,将系统进一步性能、扩展性、容错、灵活度提高。
(PS:希望这篇文章能为你提供或开拓一些思路,能解决你心里的某些疑惑,希望大家能喜欢)
相关推荐
- 单点登录(SSO)解决方案介绍(单点登录概念)
-
一、单点登录的介绍单点登录(SingleSignOn),简称为SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系...
- 系统登录的三种方式,哪一种更安全?
-
登录是一个高频的动作,笔者抓住这一个小点,分析了系统登录的几种方式和对应的场景。今天谈谈登录。登录即用户输入用户名和密码登录进系统中。B端系统,对于登录的业务场景有两种(可能不止,目前遇到过这两种):...
- 到底什么是单点登录(SSO)?(什么叫做单点登录)
-
什么是单点登录?单点登录(SingleSign-On,简称SSO)是一种集中式的身份验证和授权机制,用户只需在一处输入一次凭证(例如用户名和密码)就可以访问多个相关但独立的软件系统。在数字化时代,...
- 5年稳如老狗的单点登录系统,到底是怎么搞出来的?
-
说到单点登录(SingleSign-On,简称SSO),大家的第一反应可能是——啊不就是登录一次,能到处串门儿嘛?别说,还真差不多,就是这么个意思。但真要搭一套好用、耐造、还能扛住公司里各种奇奇怪...
- 这些负载均衡都解决哪些问题?服务、网关、NGINX?
-
在微服务项目中,有服务的负载均衡、网关的负载均衡、Nginx的负载均衡,这几个负载均衡分别用来解决什么问题呢?一、服务的负载均衡先抛出一个问题:...
- Nginx负载均衡最全详解(4大算法原理机制)
-
Nginx在大型网站架构很重要,也是大厂重点考察方向,今天我就重点来详解Nginx负载均衡@mikechen本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。Nginx负载均衡N...
- 负载均衡 Nginx Session 一致性(nginx 负载均衡 会话保持)
-
HTTPS请求跳转...
- 监控Oracle Cloud负载均衡器:Applications Manager释放最佳性能
-
设想你正在运营一个受欢迎的在线学习平台,在考试前的高峰期,平台流量激增。全球的学生同时登录,观看视频、提交作业和参加测试。如果OracleCloud负载均衡器不能高效地分配流量,或者后端服务器难...
- Nginx负载均衡:nginx.conf配置文件说明!
-
大家好,欢迎来到程序视点!我是你们的老朋友.小二!在此记录下Nginx服务器nginx.conf负载均衡的配置文件说明,部分注释收集与网络.关于nginx.conf基本的配置,请查看上一篇文章!Ng...
- Java高可用系统架构中的负载均衡策略
-
Java高可用系统架构中的负载均衡策略在现代的分布式系统中,负载均衡策略是构建高可用系统的基石。Java开发者需要深刻理解这些策略,以便打造稳定且高效的系统。接下来,让我们一起揭开负载均衡的神秘面纱。...
- Spring Boot3 客户端负载均衡全解析:从原理到实战
-
在当今互联网大厂后端技术开发的激烈竞争环境中,构建高效、稳定的微服务架构是核心诉求。其中,SpringBoot3作为热门开发框架,其客户端负载均衡功能对于提升系统性能、保障服务稳定性起着关键作用。...
- MySql高可用集群MySQL Router负载均衡读写分离
-
名词解释MGR:MysqlGroupReplication组复制,多台MySQL服务器在同一组中会自动保持同步状态,当某台服务器故障时,整个复制组依然可以保持正常并对外提供服务。...
- 性能测试之tomcat+nginx负载均衡(nginx tomcat)
-
nginxtomcat配置准备工作:两个tomcat执行命令cp-rapache-tomcat-8.5.56apache-tomcat-8.5.56_2修改被复制的tomcat2下con...
- win10/11双网卡链路聚合叠加负载均衡提升网速解决网卡网速瓶颈!
-
双网卡链路聚合一种网络配置技术,通过将多个物理网卡绑定在一起,形成一个逻辑上的网络接口,以提高网络的可靠性、可用性和性能。这种技术通常用于服务器和网络设备中,以实现负载均衡、冗余和高可用性。本机环境:...