如何让你的架构设计应用做到高内聚、低耦合?

嵌入式系统功能概要设计说明_嵌入式软件架构设计实际该怎么做? 一 错误的示范最近公司新招了一个做嵌入式软件开发的同事,该同事是从上海的某一个上市公司出来的,因为我们这边人手不够,因此把他安排了去负责一个新产品的研发,前期让他负责加速度计、NB-IOT、舵机、外置Flash的功能测试,测试完成之后,准备让他做一个该产品的概要设计。然后他花了2个星期的时间,给我们写出来一个概要设计,说实话,我看到这个概要设计,我就觉得是刚毕业的大学生写的。版本一的... 阅读详情

前言

最近review公司的代码,发现代码耦合程度特别高,修改一处,不知不觉就把其他地方影响到了,这就让我思考该如何让我们写的代码足够内聚,减少耦合呢?

"高内聚、松耦合"是一个非常重要的设计思想,能够有效地提高代码的可读性和可维护性,缩小功能改动导致的代码改动范围。它可以用来指导不同粒度代码的设计与开发,比如系统、模块、类,甚至是函数,也可以应用到不同的开发场景中,比如微服务、框架、组件、类库等。本文我们来探讨下如何让我们的应用做到高内聚、低耦合。

什么是高内聚?

首先我们将目光投射到内聚上,通常我们的代码的内聚归为7类,如下图所示,内聚性从高到低。

  1. 功能内聚

将相同功能放到一个类或者模块中,内聚程度最高。

  1. 顺序内聚

如果一个功能的输出是另外一个功能的输入,这种存在顺序依赖关系的,我们将他们归到一个模块中叫做顺序内聚。

  1. 通信内聚

如果功能点使用相同输入或输出数据,我们将他们内聚到一个模块中,叫做通信内聚。

  1. 过程内聚

如果不同的功能是由同一个控制流支配的,我们称作过程内聚。

  1. 时间内聚

不同的功能在同一时间段内执行,比如银行不同的跑批任务,由时间去控制是否放在同一个模块中的内聚叫做时间内聚。

  1. 逻辑内聚

不同的功能可能他们内部的逻辑是一致的,我们将他归在一起叫做逻辑内聚。

SOA架构简介 5)服务管控:服务运行过程中,服务中的运行管理,包括服务状态管理、服务执行管理、相关的服务运行数据等,都可以被SSP监测到并通过收集到的数据判断服务的运行健康度,给服务乃至整个系统提供强有力的稳定、性能保证。除此之外,服务的权限配置也是很重要的考虑选项,服务发布后,可控制对外的授权管理,保证只有允许/授信的服务才可以使用服务。从这里也可以看出,服务的形成是因为功能,:SOA服务层级中,所有服务均与总线连接,意味着每一个服务都可以获取到连接到总线上的服务所提供的数据,打破了传统功能的信息孤岛。 阅读详情

相关推荐

Qt Creator里玩转多项目(.pro)开发:从独立应用到动态库,一个解决方案搞定所有子模块

本文详细介绍了在Qt Creator中如何高效管理多项目(.pro)开发,从独立应用到动态库的完整解决方案。通过子目录项目(Subdirs)、子项目(.pro)和子模块(.pri)的层级结构,开发者可以轻松管理复杂系统中的模块依赖关系,提升开发效率和代码复用性。

weixin_33743248的博客 307

C# WinForm俄罗斯方块项目解析:从核心逻辑到界面实现

在桌面应用开发中,事件驱动与图形绘制是基础且核心的技术概念。事件驱动模型通过响应用户操作来更新程序状态,而图形绘制则负责将数据状态可视化呈现。这两者的结合,构成了交互式应用的技术基石,其价值在于能构建出响应迅速、用户体验良好的软件。在游戏开发、数据可视化等应用场景中,这种模式尤为关键。本文以经典的俄罗斯方块游戏为例,深入探讨如何在C# WinForm中实践**关注点分离**与**双缓冲绘图**。通过将游戏核心逻辑封装为独立的`Tetris.Core`库,实现了逻辑与界面的解耦,提升了代码的可测试性与可维护性

weixin_32943857的博客 322

c语言如何实现高内聚低耦合_详解业务系统高内聚,低耦合,值得收藏

概述今天跟领导交流时谈了一下业务解耦的一些内容,而其中就谈到了为什么需要解耦?回答这个问题,我们必须得知道什么是解耦。相信大多数朋友都在软件工程中听过这样一句话 —— “高内聚,低耦合”。那么什么是 “高内聚”,什么是 “低耦合”呢?下面区分介绍一下。01什么是内聚内聚,从字面上来看有聚精会神、聚在一起的意思,那么 高内聚也就是尽可能的使一个模块或一个类再或者是一个方法只专注做好一件事。在设计软件...

weixin_29828857的博客 1955

怎样设计出高内聚、低耦合的微服务?

高内聚低耦合,是⼀种从上⽽下指导微服务设计的⽅法。实现高内聚低耦合的⼯具主要有 同步的接⼝调用 和 异步的事件驱动 两种⽅式。用「模块化机器人」类比微服务设计,结合领域驱动设计(DDD)和现代架构原则,提供可落地的设计方法。:让服务间像「邮局与寄件人」——通过标准接口通信,无需了解内部运作。"每个微服务应有自己的私有数据库,就像每个家庭有自己的私人储物间":让每个微服务像「瑞士军刀中的独立工具」——功能完整且自包含。一样——每个齿轮(服务)完美协作又互不干扰!:模拟依赖服务宕机,验证降级能力。

完全体 714

【高频考点精讲】前端组件设计原则:高内聚、低耦合的实现方法

高内聚就像一家分工明确的餐厅:服务员只管点单,厨师只管做菜,清洁只管打扫。每个角色专注自己的事,不会出现厨师跑去擦桌子的情况。对应到组件,就是一个组件只做好一件事,所有相关代码都放在一起。低耦合则像是标准化接口的USB设备——只要接口匹配,不同品牌的U盘都能即插即用。组件之间应该通过明确定义的接口通信,而不是互相依赖内部实现。// 糟糕的耦合示例 - 全栈老李友情提示:千万别学!render() {// 直接依赖特定API// ...渲染逻辑render() {return `

全栈老李的博客 800

关于java中的一些名词的解释(高可用,低耦合,高内聚等)

关于java中的一些名词的解释(高可用,低耦合,高内聚等)

baozi121的博客 1548

【软件定义汽车】【架构篇】SOA面向服务的软件架构

本文参考:https://www.jianshu.com/p/799741994ce6 在传统的离散架构下,车内的ECU通过总线相互通信,但是它们之间的信号收发关系和路由信息都是静态的,是在编译阶段写死的。各个ECU会周期性的发出各种信号,如果需要在另外一个子网当中使用,还需要网关进行转发,出于负载的考虑,网关通常不会把所有信号都转发,如果预先定义功能中,不包含某个信号,而后续又要使用,除了修改业务所在单元之外,还需要对网关的配置进行修改。 如果车辆上市后,想在某个控制器上新增功能,可以通过OTA...

专注汽车软件开发、AutoSAR、车载以太网、SOA、EE架构。 2654

Java架构师系统架构实现高内聚低耦合

目录 1 导语 2 边界内聚耦合概述 3 聚焦内聚 4 关注耦合 5 如何实现高内聚低耦合 6【案例分析】内聚耦合规划不当的反面教材集锦 7 总结

赵广陆 1779

代码生成与软件架构设计:高内聚低耦合

代码生成与软件架构设计:高内聚低耦合 1.背景介绍 1.1 软件开发的痛点 在软件开发过程中,我们常常面临着代码重复、耦合度高、可维护性差等问题。这些问题不仅降低了开发效率,也增加了后期维护的成本。如何编写高质量、可维护的代码,是每个开发者

AI天才研究院 1124

软件系统架构黄金法则:高内聚低耦合原则

在软件开发领域,我们经常听到“高内聚低耦合”的原则。这是一种设计原则,旨在提高软件系统的可维护性、可扩展性和可重用性。本文将详细介绍高内聚低耦合原则的背景、核心概念、算法原理、最佳实践、实际应用场景、工具和资源推荐以及未来发展趋势和挑战。 1. 背景介绍 1.1 软件系统架构的重要性

AI天才研究院 1760

cartographer错误终结者 ordered_multi_queue.cc:155 Queue waiting for data

错误描述 错误提示的感应器数据可能是: Queue waiting for data:(0, points2) Queue waiting for data:(0, odom) 说明在提供给cartographter的传感器数据出现了问题,没有被成功解析。 原因分析 小编是使用自己编写的odom话题发布时,cartographer爆出了该错误。 于是设想传感器数据相关的tf或lua配置或数据本身存在错误。 于是逐个排查,最终发现了错误原因。 排查可能原因:tf错误 小编之前已处理过tf与lua配置的问题 参

人工智能机器人 4157

卡方分布的前世今生:一个统计概念的演化史

本文追溯了卡方分布从19世纪末的理论雏形到现代统计推断核心工具的发展历程。从Karl Pearson的数学奠基到Ronald Fisher的理论完善,卡方分布在医学研究、社会科学和机器学习等领域展现出广泛应用。文章通过代码示例和性质分析,揭示了这一统计概念如何持续推动数据科学创新。

weixin_29251567的博客 392

ADS负载牵引仿真避坑指南:从零开始搞定Loadpull模板设置

本文是一份针对ADS负载牵引仿真的深度避坑指南,详细解析了Loadpull模板从初始化配置到结果解读的全过程。文章重点阐述了如何根据设计目标灵活设置扫描圆、采样点等关键参数,以解决仿真不收敛、结果不完整等常见问题,并指导读者在功率与效率之间做出理性权衡,最终提取出用于匹配网络设计的最优负载阻抗。

weixin_29234423的博客 598

LRTimelapse Pro v7.0.0 激活版下载安装教程 (延迟摄影后期渲染)

LRTimelapse Pro 是一款优秀的高级延时摄影解决方案,使用将为用户提供最全面的工具和功能,从导入和组织您的延时摄影序列、视觉工作流程、在 LRTimelapse 中直接编辑和渲染、视觉去闪烁等等,功能齐全,可以使用 LRTimelapse Pro 编辑多个序列时显著提高您的效率,轻松在 LRTimelapse 中配置和使用色彩管理,进行长期延时编辑,在 LRTimelapse Pro 中使用长期工作流程。为延时编辑、关键帧、分级和渲染提供最全面的解决方案。

wyqshusan的博客 3467

告别手动输入!用Burp插件+ddddocr,5分钟搞定图片验证码自动识别

本文详细介绍了如何利用Burp插件和ddddocr开源库快速构建图片验证码自动识别系统,实现高效、零成本的验证码自动化解决方案。通过环境搭建、性能调优和Burp Suite深度集成,显著提升安全测试效率,特别适用于金融和电商系统的批量测试场景。

weixin_29099217的博客 202

别再到处找模板了!手把手教你用Vue3+Element Plus搭建一个‘能跑起来’的管理后台原型

本文详细介绍了如何利用Vue3和Element Plus在72小时内快速搭建一个功能完整的管理后台原型。从环境准备到项目获取、依赖安装、原型定制、数据模拟以及构建优化,手把手教你打造一个可直接演示的后台系统,特别适合创业者快速验证产品逻辑。

weixin_26854555的博客 182

ZYNQ平台上基于PHY芯片的IEEE1588/PTP高效实现方案

本文详细解析了在Xilinx ZYNQ平台上,如何通过选用支持IEEE1588/PTP的专用PHY芯片(如RTL8211FS-VS-CG、DP83640)来实现高精度时间同步的高效方案。文章对比了PS端与PL端MAC连接的优劣,提供了从硬件选型、接口设计、Linux驱动适配到PTP协议栈配置与性能优化的完整实战指南,并总结了关键避坑经验,为工业网络、电力系统等需要纳秒级同步的应用提供了清晰、可靠的实施路径。

kkk56的博客 1091

管好 SAP Fiori Launchpad Content:技术目录、业务目录与 KPI 工具的完整治理思路

SAP Fiori Launchpad 作为企业级统一入口,需通过技术目录(源对象)和业务目录(引用编排)分层治理。技术目录由 Launchpad App Manager 维护,负责应用描述对象(Tile 和 Target Mapping)的创建与管理;业务目录由 Launchpad Content Manager 编排,通过引用技术目录对象实现灵活配置。分析型内容则通过 F2814 统一管理。这种分层设计支持应用复用,便于升级维护,是 SAP S/4HANA 项目中实现高效内容治理的关键。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 133

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: 微服务架构中的“发件箱模式”你知道吗?
下一篇: 如何把架构图画的好看又漂亮?
Java_LingFeng
博客等级 码龄4年 505粉丝 259原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值