当前位置: 首页 > news >正文

【19】读感 - 架构整洁之道(一)

概述

《架构整洁之道》一书中有提到设计和架构的感念,它们究竟是什么?书是这么说的,它们的层次不一样,架构更“高层级”的说法,这类讨论一般都把“底层”的实现细节排除在外。而设计往往指代的具体的系统底层组织结构和实现的细节。

如果作为一名系统架构师,这两个概念是不分家的,“架构设计”。而这种思想和我不谋而合。

读感

首先明白,架构设计的目标是什么,或者说终极目标是什么?用最小的人力成本来满足构建和维护该系统的需求。这句话过于总结了,而其中给了一个比较直白的例子来说,“一个软件架构,可以通过它的维护成本来衡量,如果该成本很低,并且在系统的整个生命周期内一直能维持这样的低成本,那么这个系统的设计就是良好的。如果该系统的每次发布都会提升下一次变更的成本,那么这个设计就是不好的”。

上面提到了架构这个概念,但是软件的价值标准却不单单是这一个概念来体现的。作者认为,对于每个软件系统来讲,都可以通过行为架构两个维度来体现它的实际价值。应该确保自己的系统在这两个维度上的实际价值都能长时间维持在很高的状态。更不能够关注错误的维度,或者忽视其中的某个维度

行为

关于行为价值,我不是很理解书中所说的具体指代。但我所认为的,就是业务逻辑的体现,即是需求的实现。

架构

关于架构价值,作者有一个很有趣的概念,让我眼前一亮,我们如何理解software和hardware这两个词汇。而以我开发多年的经验来讲,这对我来说其实就是软件和硬件的意思。“ware”的意识是“产品”,而“soft”的意思,是指的软件的灵活性。那些对机器上很难改变的工作行为,我们通常称之为硬件(hardware)。这个理解简直打开了我的大门。让我重新审视了一个软件,哦不,是software这个含义。

但是说了这么多,还是没有提及架构价值。通过引申软件这次一词,想要表达的就是“软”,什么是软,就是应用容易被修改。当需求方改变需求的时候,软件变更必须可以很简单而方便地实现。变更实施的难度应该和变更的范畴(scope)成等比关系,而与变更的具体形状(shape)无关

它这里的范畴还是最好直接翻译成范围,范畴这个概念层次太高,过于哲学。放在这里,真的不是很懂。但是如果是变更的范围,就好懂很多了。

在具体讲讲加粗的这句话。范围我们已经懂了,变更的范围,即需求修改或是新增删除所涉及的模块、类、函数。那么形状是什么?作者给的示例是这样说的,我们常常会认为自己的工作就是把方螺丝拧到圆螺丝孔里面。而这违背了架构设计的初衷,如果设计偏向某种特定的“形状”,那么之后的变更只会越来越难。

其表示什么呢?继续以这个例子为例,如果我有一个圆螺丝孔,第一时间不应该是想着如何把方螺丝拧进去,而是如何创建一个接口,使得这个接口对外可以接收任何“形状”的螺丝,而最终和螺丝孔相接的就是圆孔。这就是我的理解。

软件人的职责

艾森豪威尔矩阵讲了一个道理,难题分为两种,紧急的和重要的,而紧急的难题永远是不重要的,重要的难题永远是不紧急的。对于这句话,我是不敢苟同的,因为作为一个软件开发者来说,经常收到紧急而又重要的任务那是太多了。

软件系统中,行为是紧急的,架构是重要的

书中将四类事情进行了排序
1、重要且紧急
2、重要不紧急
3、不重要但紧急
4、不重要且不紧急
显然作者把重要的层级拉高了。业务和开发人员常常把第三优先级提到第一优先级去做,这不是混淆,而是没有区分这两类。如何区分,评估系统架构的重要程度,这就是软件开发人员自己的职责了。

总结

目前两章的重点,以及我个人的理解就这么多了,之后文章会开始讲后面章节的我的读感已经认为重要的内容以及有趣的认识,

相关文章:

【19】读感 - 架构整洁之道(一)

概述 《架构整洁之道》一书中有提到设计和架构的感念,它们究竟是什么?书是这么说的,它们的层次不一样,架构更“高层级”的说法,这类讨论一般都把“底层”的实现细节排除在外。而设计往往指代的具体的系统底层组织结构…...

多层全连接神经网络(三)---分类问题

问题介绍 机器学习中的监督学习主要分为回归问题和分类问题,我们之前已经讲过回归问题了,它希望预测的结果是连续的,那么分类问题所预测的结果就是离散的类别。这时输入变量可以是离散的,也可以是连续的,而监督学习从数…...

签名优化:请求数据类型不是`application/json`,将只对随机数进行签名计算,例如文件上传接口。

文章目录 I 签名进行请求数据类型类型判断1.1 常见的ContentType1.2 签名切面处理1.3 文件上传案例1.4 处理接口信息背景: 文件上传接口的请求数据类型通常为multipart/form-data,方便携带文本域和使用接口文档进行调试。 如果携带JSON数据,不方便调试接口。 前端数据也要特…...

PostgreSQL的Json数据类型如何使用

PostgreSQL中的JSON数据类型提供了一种灵活的方式来存储JSON(JavaScript Object Notation)数据。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在PostgreSQL中,你可以使用JSON和JSONB&…...

SpringData JPA Mongodb 查询部分字段

JPA 网上用的好像不多&#xff0c;找了好多材料以后最终找了这个可行的方案&#xff1a; Query(fields "{tender_id:1,_id:0}")List<MGPltTender> findByTenderIdIsNotNull(PageRequest pageRequest); 调用&#xff1a; Sort sort Sort.by(popularType.getC…...

NC65 设置下拉列表框值

NC65 设置下拉列表框值&#xff0c;如人员任职信息的异动事件&#xff1a; // 只有在入职登记时&#xff0c;才为异动事件下拉框过滤掉【离职】和【离职后变动】两个item DefaultConstEnum[] enumItems initTransevent(); BillItem item getBillCardPanel().getHeadItem(Psn…...

小阿轩yx-高性能内存对象缓存

小阿轩yx-高性能内存对象缓存 案例分析 案例概述 Memcached 是一款开源的高性能分布式内存对象缓存系统用于很多网站提高访问速度&#xff0c;尤其是需要频繁访问数据的大型网站是典型的 C/S 架构&#xff0c;需要构建 Memcached 服务器端与 Memcached API 客户端用 C 语言…...

华中师范大学学报人文社会科学版

一、《华中师范大学学报(人文社会科学版)》是国家教育部主管、华中师范大学主办的人文社会科学综合性学术期刊。本刊用稿以质量为标准,不分内稿外稿。文稿一经发表,即付报酬,不收版面费。 二、根据教育部和新闻出版总署颁发的社会科学学报编排规范,来稿应注意以下各项: 1. 题…...

CI/CD的node.js编译报错npm ERR! network request to https://registry.npmjs.org/

1、背景&#xff1a; 在维护paas云平台过程中&#xff0c;有研发反馈paas云平台上的CI/CD的前端流水线执行异常。 2、问题描述&#xff1a; 流水线执行的是前端编译&#xff0c;使用的是node.js环境。报错内容如下&#xff1a; 2024-07-18T01:23:04.203585287Z npm ERR! code E…...

用ssh tunnel的方式设置 AWS DocumentDB 公网访问

AWS DocumentDB的设定是只允许VPC内进行访问的&#xff0c;同时官方文档给了步骤&#xff0c;通过ssh tunnel的方式&#xff0c;可以从公网&#xff0c;或者从VPC外的网络&#xff0c;对DocumentDB进行访问。 我阅读了AWS官方文档并测试了这个步骤&#xff0c;如下是详细的步骤…...

基于电鸿(电力鸿蒙)的边缘计算网关,支持定制

1 产品信息 边缘计算网关基于平头哥 TH1520 芯片&#xff0c;支持 OpenHarmony 小型系统&#xff0c;是 连接物联网设备和云平台的重要枢纽&#xff0c;可应用于城市基础设施&#xff0c;智能工厂&#xff0c;智能建筑&#xff0c;营业网点&#xff0c;运营 服务中心相关场…...

WPF之URI的使用

pack://application:, pack://application:, 是一个在 WPF (Windows Presentation Foundation) 应用程序中用于指定资源位置的 URI (统一资源标识符) 方案的特定格式。这个格式用于访问嵌入在应用程序程序集&#xff08;assemblies&#xff09;中的资源&#xff0c;如图像、XA…...

Web开发:ASP.NET CORE前后端交互之AJAX(含基础Demo)

目录 一、后端 二、前端 三、代码位置 四、实现效果 五、关键的点 1.后端传输给前端&#xff1a; 2.前端传输给后端 一、后端 using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.AspNetCore.Mvc.Rendering; using WebAppl…...

经典神经网络(14)T5模型原理详解及其微调(文本摘要)

经典神经网络(14)T5模型原理详解及其微调(文本摘要) 2018 年&#xff0c;谷歌发布基于双向 Transformer 的大规模预训练语言模型 BERT&#xff0c;而后一系列基于 BERT 的研究工作如春笋般涌现&#xff0c;预训练模型也成为了业内解决 NLP 问题的标配。 2019年&#xff0c;谷歌…...

C语言结构体字节对齐技术详解

C语言结构体字节对齐技术详解&#xff08;第一部分&#xff09; 在C语言中&#xff0c;结构体字节对齐是一个重要的概念&#xff0c;它涉及到内存中数据的布局和访问效率。字节对齐可以帮助提高程序的性能&#xff0c;减少内存碎片&#xff0c;并确保数据的一致性和正确性。本…...

Linux编辑器——vim的使用

目录 vim的基本概念 命令模式 底行模式 插入模式 注释和取消注释 普通用户进行sudo提权 vim配置问题 vim的基本概念 一般使用的vim有三种模式&#xff1a; 命令模式 底行模式和插入模式&#xff0c;可以进行转换&#xff1b; vim filename 打开vim&#xff0c;进入的…...

Java案例斗地主游戏

目录 一案例要求&#xff1a; 二具体代码&#xff1a; 一案例要求&#xff1a; &#xff08;由于暂时没有学到通信知识&#xff0c;所以只会发牌&#xff0c;不会设计打牌游戏&#xff09; 二具体代码&#xff1a; Ⅰ&#xff1a;主函数 package three;public class test {…...

sqlite|轻量数据库|pgadmin4的sqlite数据库操作--重置密码和账号解锁

前言&#xff1a; pgadmin4的用户密码以及pgadmin4创建的pg数据库的连接信息等等都是存放在sqlite数据库内的&#xff1b;而有的时候&#xff0c;可能会由于自己的问题将pgadmin4的密码忘记&#xff0c;这个时候需要重置pgadmin4的密码&#xff0c;或者是pgadmin4的密码输错多…...

【ARMv8/v9 异常模型入门及渐进 9.1 - FIQ 和 IRQ 打开和关闭】

请阅读【ARMv8/v9 ARM64 System Exception】 文章目录 FIQ/IRQ Enable and Disable汇编指令详解功能解释使用场景和注意事项 FIQ/IRQ Enable and Disable 在ARMv8/v9架构中&#xff0c;可以使用下面汇编指令来打开FIQ和 IRQ,代码如下&#xff1a; asm volatile ("msr da…...

深入探索Flutter中的状态管理:使用Provider库

当涉及Flutter状态管理时,provider是一个强大且灵活的解决方案,它提供了一种简单且高效的方式来管理应用程序状态。本文将详细介绍Flutter中provider插件的使用方法、示例代码、各种使用场景以及注意事项。 1. 引入依赖 首先,需要在项目的pubspec.yaml文件中添加provider依…...

ofa_image-caption生产环境部署:支持批量图片处理与结果导出的企业方案

ofa_image-caption生产环境部署&#xff1a;支持批量图片处理与结果导出的企业方案 1. 项目背景与核心价值 在实际的企业应用中&#xff0c;图像内容理解已经成为许多业务场景的必备能力。无论是电商平台的商品图片描述生成&#xff0c;还是内容平台的海量图片标注&#xff0…...

EMI滤波器选型指南:从共模与差模噪声到实际应用场景

1. EMI滤波器的核心作用与选型挑战 刚入行那会儿&#xff0c;我负责的第一个电源项目就栽在了EMI测试上。设备一上电&#xff0c;测试仪器的曲线就像心电图发作似的疯狂跳动。当时 mentor 只说了一句&#xff1a;"去查查共模和差模的区别"。这句话成了我后来十年硬件…...

OpenClaw性能优化:降低GLM-4.7-Flash任务Token消耗的5个技巧

OpenClaw性能优化&#xff1a;降低GLM-4.7-Flash任务Token消耗的5个技巧 1. 为什么需要关注Token消耗 当我第一次在本地部署OpenClaw并接入GLM-4.7-Flash模型时&#xff0c;最让我震惊的不是它的自动化能力&#xff0c;而是执行简单任务后查看账单时的Token消耗数字。一个看似…...

PlatformIO环境下ESP32-S3与N16R8开发板配置全攻略

1. 为什么选择PlatformIO开发ESP32-S3&#xff1f; 很多刚接触ESP32-S3的开发者会纠结&#xff1a;到底用Arduino IDE还是PlatformIO&#xff1f;我刚开始用Arduino IDE&#xff0c;后来切换到PlatformIO就再也没回去过。PlatformIO有三大杀手锏&#xff1a;跨平台支持&#xf…...

uStepper S开源库深度解析:闭环步进控制与TMC2130驱动实战

1. uStepper S 开源驱动库深度解析&#xff1a;面向嵌入式工程师的实战指南 uStepper S 是一款集成了高性能步进电机驱动、高精度磁编码器反馈、ARM Cortex-M0 微控制器&#xff08;NXP LPC11U35&#xff09;与丰富外设接口的智能运动控制模块。其配套的 uStepper S Arduino…...

OpenClaw深度配置:Qwen3.5-9B模型参数调优指南

OpenClaw深度配置&#xff1a;Qwen3.5-9B模型参数调优指南 1. 为什么需要关注模型参数调优&#xff1f; 第一次用OpenClaw对接Qwen3.5-9B模型时&#xff0c;我遇到了一个奇怪现象&#xff1a;同样的"整理桌面截图并分类归档"任务&#xff0c;白天执行成功率能达到8…...

SAP EWM开发实战:手把手教你用ABAP OO类 /SCWM/CL_SP_PRD_INB 创建内向交货单

SAP EWM开发实战&#xff1a;基于ABAP OO类实现内向交货单自动化创建 1. 理解内向交货单创建的技术背景 在SAP扩展仓库管理(EWM)系统中&#xff0c;内向交货单(Inbound Delivery)是管理入库流程的核心凭证。与传统的SAP ERP系统不同&#xff0c;EWM模块在设计上采用了更加灵活的…...

TVM构建系统详解:CMake与Makefile配置最佳实践

TVM构建系统详解&#xff1a;CMake与Makefile配置最佳实践 引言&#xff1a;TVM构建系统的核心挑战 深度学习编译器TVM&#xff08;Tensor Virtual Machine&#xff09;作为一个跨平台、多后端的开源项目&#xff0c;其构建系统面临着独特的复杂性。开发者需要在不同架构&#…...

终极指南:Autoenv如何彻底解决团队开发环境配置难题

终极指南&#xff1a;Autoenv如何彻底解决团队开发环境配置难题 【免费下载链接】autoenv 项目地址: https://gitcode.com/gh_mirrors/aut/autoenv Autoenv是一款强大的目录环境管理工具&#xff0c;能够在您进入包含.env文件的目录时自动执行其中的环境配置&#xff0…...

逆向分析WhatsApp的GIF功能:用Frida抓取Tenor API的完整请求与响应数据

逆向工程实战&#xff1a;用Frida解密WhatsApp的GIF数据流 当你在WhatsApp中发送一个GIF表情时&#xff0c;是否好奇过这个动态图片是如何从服务器传输到你的手机上的&#xff1f;今天我们将深入WhatsApp客户端内部&#xff0c;通过动态插桩工具Frida来捕获和分析其背后的Tenor…...