架构设计之学新而知故

缘由

因为一些特殊的机缘,接触到洋葱架构等一些新架构设计概念。

尝试理解了一段时间,就想简单梳理下对它们的理解,以达到学新而知故 😃

信息增益

以前计算机专业并不设置通信领域的信息论的专业课程,但是,信息论的知识,应该是每个计算机从业者必知必会的概念。

区别信息之间的相同与差别,找出相同和不同,才能将掌握的信息量增加,以达到学新而知故!

  • 集中精神、注意观察、多试几次!

多试几次这步,信息量的增加是核心要诀,不然,都是无效的徒劳

所以,我总在信息量不增加的情况下,宁肯抱残守缺,并不选择继续重试,必须在找到新方法、新工具、新视角情况下,展开下一次尝试!

以前积累的架构设计

  • 分层设计
  • MVC设计

新学习的架构

  • 六边形架构
  • 洋葱架构

架构设计更高层面的哲学

  • 高内聚、低耦合
  • 单一职责
  • 依赖倒置,利用稳定接口将变化隔离
  • 稳定之锚必须存在,不然,无法建构一个系统,犹如在沙滩上搭建房子一般
  • 即使是依赖倒置这种场景,也有稳定的部分和变化的部分

分层设计

分层设计,层次之间拥有稳定的接口,但层次与层次之间在细节上无关的,代表着高内聚和低耦合、单一职责设计原则指导下的隔离。

其典型代表是网络协议栈

当协议栈处理网络层IP协议时,并不需要关心传输层TCP/UDP层的具体报文,而仅仅将其看成有效载荷,进行无差别的处理而已。

在这里插入图片描述

  • 另外,分层设计需要注意自举能力,通过功能分解,最终完成大功能的自举过程

MVC设计

MVC设计,按照职责进行分割系统,如以用户为视角,从前端View,到中台Controller,再到数据后端Model。

在这里插入图片描述
从结构上来看,与分层设计并无太大区别,但是,具有新意,在WEB系统场景,使得对于理解和实践分层设计很有帮助。

六边形架构和洋葱架构

两种新的架构,着重于依赖倒置原则,将依赖外悬进行适配,或分出不同的圈层进行隔离,以利于核心业务层的稳定。

如果说,分层设计对上层的依赖仅为有效载荷的假设,六边形架构和洋葱架构,则允许更多的假设,
但采用依赖倒置的办法,在外层圈层将这些依赖固化后,而在核心层可以进行无差别的接口假设进行执行。

六边形架构和洋葱架构,退化来看,也是一种分层设计,但还是有所着重。在适应的场景,用其进行建构更方便,用其长处!

当分层演变为多边形

在这里插入图片描述

当简单的分层设计出现比较严重跨层的耦合时,例如,途中红色的线,实际上出现多边形结构。

这时看是否设计上向六边形架构和洋葱架构靠拢。

六边形架构

在这里插入图片描述

洋葱架构

在这里插入图片描述

树形架构

以前刚毕业时,自己也曾有:在枝叶处确定细节,在主干区无差别地进行共同处理

此种无名气的设计思想,是否也可以理解为,在六边形架构和洋葱架构之外,另外一重诠释呢?

设计的稳定之锚

纵观各种架构设计,居于内层的领域模型,必须是稳定之锚。

然后,合理地区分变化和稳定的关系,迭代、重构开发,谁也无法提前理解全部,哈哈

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

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

相关文章

英语复习之英语形近词总结(四)

英语形近词总结复习第四部分: 单词 释义例句 genuine 英 /ˈdʒenjuɪn/ 美 /ˈdʒenjuɪn/ adj.真实的,真正的;诚恳的 1.Only genuine refugees can apply for asylum. 只有真正的难民才能申请政治避难。 《牛津词典》 2.This isnt a genui…

C++笔试强训day19

目录 1.小易的升级之路 2.礼物的最大价值 3.对称之美 1.小易的升级之路 链接 模拟就行&#xff0c;唯一可能是难点得就是gcd&#xff08;最大公约数&#xff09; #include <iostream> using namespace std; #define int long long const int N 1e5 10; int arr[N];…

利用IP地址查询解决被“薅羊毛”的方法

在互联网时代&#xff0c;随着各种网络诈骗手段的不断更新和演变&#xff0c;“薅羊毛”成为了一种常见的网络犯罪行为。其中&#xff0c;利用查询IP地址进行欺诈活动已经成为一种普遍的手段。当个人或组织的IP地址被不法分子查询后&#xff0c;可能会面临虚假注册、盗取个人信…

AVL Cruise与Simulink联合仿真(通过MATLAB DLL方式)

最近毕业设计需要用到AVL Cruise与Simulink进行联合仿真&#xff0c;分析汽车模型的经济性。下面介绍一下我所知的AVL Cruise与Simulink联合仿真的几种方式&#xff0c;它们各自的优缺点&#xff0c;以及DLL方式联合仿真的具体配置过程。我这里用的MATLAB软件版本是2021a&#…

有边数限制的最短路

文章目录 题目 有边数限制的最短路算法分析1、问题&#xff1a;为什么Dijkstra不能使用在含负权的图中&#xff1f;dijkstra详细步骤2、什么是bellman - ford算法&#xff1f;3、bellman - ford算法的具体步骤4、在下面代码中&#xff0c;是否能到达n号点的判断中需要进行if(di…

水准网间接平差

目录 一、原理概述二、案例分析三、代码实现 一、原理概述 间接平差的函数模型和随机模型为&#xff1a; L ^ B X ^ d D σ 0 2 Q σ 0 2 P − 1 \hat{L}B\hat{X}d\\ D\sigma_0^2Q\sigma_0^2P^{-1} L^BX^dDσ02​Qσ02​P−1 误差方程为&#xff1a; V B x ^ − l VB\ha…

信息系统项目管理师0104:详细可行性研究(7项目立项管理—7.2项目可行性研究—7.2.3详细可行性研究)

点击查看专栏目录 文章目录 7.2.3详细可行性研究1.详细可行性研究的依据2.详细可行性研究的原则3.详细可行性研究的方法4.详细可行性研究的内容5.详细可行性研究报告记忆要点总结7.2.3详细可行性研究 详细可行性研究是在项目决策前对与项目有关的技术、经济、

智慧公厕:打造智能、安全、舒适的公共厕所新时代

随着智慧城市建设的不断推进&#xff0c;公共设施的智能化也已成为一种必然趋势。在这一背景下&#xff0c;智慧公厕作为城市管理的一个重要方面&#xff0c;正逐渐走进人们的视野。通过对所在辖区内所有公共厕所的全域感知、全网协同、全业务融合以及全场景智慧的赋能&#xf…

如何训练一个大模型:LoRA篇

目录 写在前面 一、LoRA算法原理 1.设计思想 2.具体实现 二、peft库 三、完整的训练代码 四、总结 写在前面 现在有很多开源的大模型&#xff0c;他们一般都是通用的&#xff0c;这就意味着这些开源大模型在特定任务上可能力不从心。为了适应我们的下游任务&#xff0c;…

【退役之重学 Java】初步认识 AQS

一、AQS 是什么 Abstract Queued Synchronizer &#xff0c;翻译过来就是“抽象的排好队的同步器”。 AQS 是一个用来构建锁和同步器的框架。是用来构建锁或者其他同步器组件的重量级基础框架及整个JUC体系的基石&#xff0c;通过内置的FIFO队列来完成线程获取资源的排队工作&…

251 基于matlab的动态粒子群算法

基于matlab的动态粒子群算法。普通粒子群算法无法感知外界环境的变化&#xff0c;在外界环境发生改变时无法实时进行响应&#xff0c;因而缺乏动态环境寻优能力。在普通粒子群算法基本上通过增加敏感粒子得到一种动态粒子群算法&#xff0c;该算法通过实时计算敏感粒子的适应度…

2024年第七届可再生能源与电力工程国际会议(REPE 2024)即将召开!

2024年第七届可再生能源与电力工程国际会议&#xff08;REPE 2024&#xff09;将于2024年9月25-27日在中国北京召开, 由清华大学主办。REPE 2024将汇聚国内外知名专家学者通过主旨报告、分组讨论和互动交流等形式&#xff0c;分享最新的研究成果、技术进展和应用案例&#xff0…

【教程向】从零开始创建浏览器插件(二)深入理解 Chrome 扩展的 manifest.json 配置文件

第二步&#xff1a;深入理解 Chrome 扩展的 manifest.json 配置文件 上一次我们已经着手完成了一个自己的浏览器插件&#xff0c;链接在这里&#xff1a;我是链接 在本篇博客中&#xff0c;我们将更详细地探讨 Chrome 扩展中的 manifest.json 文件。这个文件是每个浏览器扩展…

docker容器实现https访问

前言&#xff1a; 【云原生】docker容器实现https访问_docker ssl访问-CSDN博客 一术语介绍 ①key 私钥 明文--自己生成&#xff08;genrsa &#xff09; ②csr 公钥 由私钥生成 ③crt 证书 公钥 签名&#xff08;自签名或者由CA签名&#xff09; ④证书&#xf…

C入门笔记

1. c文件执行过程 C语言程序的执行过程可以分为四个基本步骤&#xff1a;预处理、编译、汇编和链接。下面是这些步骤的简要概述&#xff1a; 预处理&#xff1a;在这个步骤中&#xff0c;预处理器将源代码中以 # 开头的指令进行处理&#xff0c;例如 #include 和 #define。预…

STM32快速入门(定时器之输出PWM波形)

STM32快速入门&#xff08;定时器之输出PWM波形&#xff09; 前言 本节主要讲解STM32利用通用定时器&#xff0c;利用CCR和CNT寄存器&#xff0c;输出指定占空比和频率的PWM波形。其功能的应用有&#xff1a;实现LED呼吸灯的效果、控制步进电机、控制直流电机转速等。 导航 …

ue5地编模块学习记录

ue5网站功能3d溜溜网下载模型https://anyconv.com/max-to-fbx-converter/3dmax转换fbx模型解决问题记录 一、光源 搜索光源搜索不到的时候可以点击 窗口> 对场景内的光照进行处理

最佳解决Maven同一依赖多版本共存问题,重复依赖(同一个jar包,多个版本)-maven-shade-plugin

先看链接:原文链接 参照原文链接生成的文件(下面是我放的位置) mvn指令 mvn install:install-file -DfileD:\mavenrepository/maven-shade.jar -DgroupIdcom.wj -DartifactIdmaven-shade -Dversion1.1 -Dpackagingjar如果配置了maven_home 和java_home可以任意打开cmd执行(…

Google: 在新知识上微调大语言模型是否会鼓励产生幻觉?

摘要 当大型语言模型通过监督式微调进行对齐时,它们可能会遇到在预训练期间没有获得的新事实信息。人们经常推测,这可能会教导模型产生事实上不正确的回应的行为,因为模型被训练成生成没有基于其预先存在的知识的事实。在这项工作中,Google研究了这种暴露在新知识下对微调后模…

基于springboot实现高校教师电子名片系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现高校教师电子名片系统演示 摘要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;名片信息因为其管理内容繁杂&#xff…