用一种新的分类方法揭示设计模式的思考路径与内在联系
设计模式是程序员们长期实践经验的总结,被认为是面向对象方法的“刀刃”部分。 1990年代出版的《Design Patterns》收录了23种设计模式,总结了一些有益的设计原则,为这份实践经验的理论化做出了开创性贡献。 我们经常引用《Design Patterns》中的观点将这些设计模式分成创建型、结 ...
MVC、MVP、MVVM与DDD架构设计比较,不同语言源码实现
模型-视图-控制器(Model-View-Controller,简称 MVC)是一种经典软件架构设计,通过分层解耦,使得系统结构清晰和易于维护,具有良好的可扩展性。MVC 适用于需要清晰分离用户界面、业务逻辑和数据管理的应用场景。随着MVC的发展,还衍生出了MVP、MVVM以及领域驱动设计(DDD)... ...
掌握设计模式--备忘录模式
备忘录模式(Memento Pattern) 备忘录模式(Memento Pattern)是一种行为型设计模式,用于在不暴露对象内部实现细节的情况下,捕获对象的内部状态,并在需要时恢复到先前的状态。该模式通常用于需要撤销和恢复操作的场景。 核心思想:在不破坏对象封装的前提下,捕获并保存对象的内部状态 ...
掌握设计模式--命令模式
命令模式(Command Pattern) 命令模式(Command Pattern)是一种行为型设计模式,它将请求(命令)封装成对象,从而使您能够参数化客户端(调用者)使用不同的请求、队列请求或者日志请求,甚至支持可撤销的操作。 核心思想是 将请求封装成对象,从而使得调用者与接收者解耦,同时支持请 ...
当Kafka化身抽水马桶:论组件并发提升与系统可用性的量子纠缠关系
《当Kafka化身抽水马桶:论组件并发提升与系统可用性的量子纠缠关系》 引言:一场OOM引发的血案 某个月黑风高的夜晚,监控系统突然发出刺耳的警报——我们的数据发现流水线集体扑街。事后复盘发现:Kafka集群、Gateway、Discovery服务默契地同时表演了OOM自杀式艺术行为。这场事故完美演 ...
从配置读取到懒加载模式:从具体问题到抽象设计语素的提炼
在实际项目中,我们常常需要高效、线程安全地加载配置文件。为了确保在高并发场景下配置只加载一次、且读取速度尽可能快,我们往往会设计一些特殊的加载方案。今天,我将记录一次从具体实现问题出发,逐步抽象出高级设计概念的过程。 1. 高效加载配置的需求 在项目初期,我们的需求很简单:如何在多线程环境下高效加载 ...
掌握设计模式--访问者模式
访问者模式(Visitor Pattern) 访问者模式(Visitor Pattern)是一种行为设计模式,它允许你将操作(方法)封装到另一个类中,使得你可以在不修改现有类的情况下,向其添加新的操作。 核心思想是将数据结构和对数据的操作分离,通过访问者对象来对数据进行操作,而不是将操作方法直接嵌入 ...
大型通用电子制造执行系统(MES)
简介: 系统参考西门子MOM智能制造Opcenter工业软件制造执行系统Camstar电子套件人机料法环数据建模业务对象和车间生产执行事务逻辑,采用面向对象分层设计与C#编程开发:包含电子制造企业人机料法环业务数据建模实体对象,数据实体持久化映射,数据工厂会话配置,车间生产服务抽象业务逻辑,We ...
依赖注入(DI)与控制反转(IoC)
依赖注入(DI)与控制反转(IoC)可能是一些开发小伙伴耳熟但又不能详的两个词,经常看到它们的名字,但又不理解。这两个词来源于英文直译,看似高深莫测,其实非常简单,并且在一些开发场景中扮演着不可或缺的角色,比如单元测试离不开依赖注入,IoC容器是插件框架的最佳拍档等,本文尝试以最简单的方式阐述这两种... ...
对象命名为何需要避免'-er'和'-or'后缀
之前写过两篇关于软件工程中对象命名的文章:开发中对象命名的一点思考与对象命名怎么上手?从现实世界,但感觉还是没有说透, 在软件工程中,如果问我什么最重要,我的答案是对象命名。良好的命名能够反映系统的本质,使代码更具可读性和可维护性。本文通过具体例子,探讨为何应该以对象本质而非功能来命名,以及不当命名 ...
[设计模式]行为型-责任链模式
简介 责任链模式(Chain of Responsibility Pattern)允许开发者将请求沿着链进行发送,直到其中一个处理者对象对其进行处理。 责任链模式的角色说明: 处理者(Handler):声明所有具体处理类的通用接口。该接口通常仅包含一个方法,用于处理请求,但有时还会包含一个用于设置下 ...
在大型软件项目中优化组件配置
Ron Lach 摄影 我还记得当年参与一个复杂分布式系统的大规模重构时的情景。 当时,我们团队的最终目标是优化各个模块的组织、跟踪和部署方式,但很快发现,我们现有的组件管理方式存在诸多问题。 有些团队使用不一致的命名规范,有些仍依赖过时的脚本来处理部署,而没有人有一个统一的系统来跟踪生产环境中运行 ...
CORS 跨域请求一种后端适配解决方案
平常工作难遇到这类问题, 一般搭建新系统或搭建系统二时需要复用系统一一些前后端能力, 可能会遇到跨域拦截问题. 这里提供一种基于服务器解决方案. 更多其他方案, 详细细节可自行查阅更多资料, 写一些前后端交互最小现场. 首先理解 CORS 跨域拦截是什么回事? 其实一般浏览器请求服务器,会发两次请求 ...
依赖倒置 DIP、依赖注入 DI、控制反转 IoC 和工厂模式
1. 依赖倒置 依赖倒置原则(Dependency Inversion Principle, DIP)是 SOLID 原则中的一项,其核心思想是通过抽象解耦高层模块和低层模块,使二者都依赖于抽象而非具体实现。 依赖反转/倒置的体现:传统依赖方向是高层模块直接调用低层模块,在源码级别上高层模块依赖低层 ...
QT QML 使用 QuickFlux 和 Qt FluentUI 整合集成
在 Qt QML 中结合 QuickFlux(状态管理框架)与 Qt FluentUI(现代 UI 组件库)可以实现高效的状态管理和美观的界面设计。以下是实现两者协作的完整方案和代码示例: 1. 环境配置 1.1 安装依赖 QuickFlux:通过 qpm(Qt Package Manager)安装 ...