写代码不用"if"行不行,曾经的反 if 运动
如果在IT行业的时间够长的话,可能还记得大约10几年前,设计模式风靡一时的时候,有过一段反 "if" 的运动。 所谓的反"if"运动,其实是夸大了"if"语句带来的问题,比如当时提出的问题有: 代码不好维护,特别是if或者else中的代码比较多的时候 if和 else if分支太多的时候,代码难以阅 ...阅读全文
如果在IT行业的时间够长的话,可能还记得大约10几年前,设计模式风靡一时的时候,有过一段反 "if" 的运动。 所谓的反"if"运动,其实是夸大了"if"语句带来的问题,比如当时提出的问题有: 代码不好维护,特别是if或者else中的代码比较多的时候 if和 else if分支太多的时候,代码难以阅 ...阅读全文
公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。 数据库和Redis如何保持强一致性,这篇文章告诉你 目的 Redis和Msql来保持数据同步,并且强一致,以此来提高对应接口的响应速度,刚开始考虑是用mybatis的二级缓存,发现坑不少,于是决定自己搞 要关注的问题点 操 ...阅读全文
UDP 分片 与 丢包,UDP 真的比 TCP 高效吗?UDP(用户数据报协议)和TCP(传输控制协议)在很多方面都有显著的区别。总体来说,TCP更适合需要可靠传输的应用,例如网页浏览、电子邮件等,而UDP则更适合对速度有高要求,但对数据完整性要求较低的应用,例如实时视频流或游戏。在多数网络环境下, ...阅读全文
我们在刚开始架构设计时手足无措,但是随着我们完成一个又一个的系统架构设计以后,发现架构设计是有章法可循的,只要我们学习这些章法和套路,并且在工作过程中不断的积累与沉淀,就会行成一个完整的架构设计方法论,面对新的大型系统架构设计,也会一步一步有节奏进行,最终完成整体的架构设计 ...阅读全文
银行账户转账案例 银行账户转账案例是一个经典的领域驱动设计(DDD)应用场景。接下来我们通过一个简单的银行账户转账案例,来了解如何使用 Wow 进行领域驱动设计以及服务开发。 银行转账流程 准备转账(Prepare): 用户发起转账请求,触发 Prepare 步骤。这个步骤会向源账户发送准备转账的请 ...阅读全文
本章以实时OALP引擎Clickhouse(简称ck)为例, 以其面向场景, 架构设计, 细节实现等方面来介绍, 深度了解其如何成为了OLAP引擎中的性能之王. ...阅读全文
PlatformIO简介 PlatformIO是一个开源的物联网(IoT)开发平台,旨在提供跨平台的软件开发工具和框架,使开发者能够更轻松地构建和部署嵌入式系统和物联网设备。 PlatformIO提供了统一的开发环境,支持多种不同的开发板和微控制器平台,包括Arduino、Raspberry Pi、 ...阅读全文
前言 这是第二次博客作业,总结了近三次PTA大作业的完成情况,这三次的大作业难度逐渐增大,完全理不清逻辑,真的越想越混乱,代码写的也是很乱,没有一个整体的框架结构,读起来很困难,没有学到java程序编写的真谛,总之对于我,一个逻辑很差很差的人来说,越来越复杂的题目,写起来真的痛苦,到后面的题目,基本 ...阅读全文
微服务是一种软件架构策略,将应用程序分解为一组解耦的、自治的服务。采用微服务架构将改善整体性能和可扩展性,本文将概述微服务设计和实施的基本考虑因素。 ...阅读全文
重构有利于项目的健壮和精简,平时要养成重构的好习惯,“小步快走”,尽量避免留着统一重构的思想,积累很多技术债后重构精力、时间成本很大,风险也会大很多 ...阅读全文
基本介绍: 命令模式,顾名思义就是将命令抽象化,然后将请求者和接收者通过命令进行绑定。 而命令的请求者只管下达命令,命令的接收者只管执行命令。 从而实现了解耦,请求者和接受者二者相对独立。 单独理解起来比较困难,咱们还是通过具体实例来说明吧。 举例说明: 生活中遥控控制电器就是命令模式,比如智能开关 ...阅读全文
需求落地分布式应用服务 将需求转化为分布式应用服务的过程可以按照以下步骤进行: 理解需求:首先,你需要仔细阅读和理解业务需求。与相关的利益相关者(如业务分析师、产品经理等)进行沟通,确保你对需求的理解是准确的。 设计架构:根据需求,设计一个适合的分布式应用架构。这包括确定应用的组件和模块,以及它们之 ...阅读全文
趁着双十一备战封板,终于又有一些时间可以梳理一下最近的心得。最近这半年跟同事讨论比较多的是分层架构,然后就会遇到两个触及灵魂的问题,一个是如何做好分层架构,二是DDD在架构层面该如何落地。 ...阅读全文
一、定义 给某一个对象提供一个代理或占位符,并由代理对象控制对原对象的访问。代理模式是一种结构型模式。 二、描述 代理模式的结构比较简单,其核心是代理类,为了让客户端能够一致性地对待真实对象和代理对象,在代理模式中引入了抽象层。包含以下三个角色: 1、Subject(抽象主题角色):它声明真实主题和 ...阅读全文
基础介绍: 将抽象部分与它的实现部分分离,使它们都可以独立地变化。适用于不希望在抽象和实现部分之间有固定的绑定关系的情况,或者类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充的情况。 将抽象部分与实现部分分离,使它们都可以独立地变化。 其实两个都是抽象的部分,更准确的说,是将一个事物中多个维 ...阅读全文
清晰架构原则对于任何希望创建健壮、可维护和可扩展软件的软件开发者来说都至关重要。理解并实施这些概念可以显著提升你的编程技能。以下是对20个基本架构洞见的深入探讨:依赖规则: 清晰架构的核心是依赖规则。它规定源代码的依赖关系应始终指向内部。这种内向的方向确保了一个具有弹性的基础,强调了关注点的分离,并 ...阅读全文
架构目标 高可用性 整体系统可用性最低99.9%,目标99.99%。全年故障时间整个系统不超过500分钟,单个系统故障不超过50分钟。 高可扩展性 系统架构简单清晰,应用系统间耦合低,容易水平扩展,业务功能增改方便快捷。 低成本 增加服务的重用性,提高开发效率,降低人力成本; 最终一致性 服务设计能 ...阅读全文
本文介绍Util应用框架如何记录日志. 日志记录共分4篇,本文是正文,后续还有3篇分别介绍写入不同日志接收器的安装和配置方法. 概述 日志记录对于了解系统执行情况非常重要. Asp.Net Core 抽象了日志基础架构,支持使用日志提供程序进行扩展,提供控制台日志等简单实现. Serilog 是 . ...阅读全文
我们可以采取多种方法对数据架构进行分类,且每种方法都有自己的优缺点。它们可以帮助你做出明智的决定,选择适合与你需求最匹配的设计。两种最流行的基于速度的架构是Lambda和Kappa,本文将介绍基于速度的数据架构,以及它们在总体方案中的位置。 ...阅读全文
基础介绍: 组合模式用于表示部分-整体的层次结构。适用于希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象的情况。 顾名思义,什么叫部分-整体,比如常见的前端UI,一个DIV标签中可以存在多个A标签、P标签、DIV标签等等。 相较于DIV这个容器整体而言,其中所含的A标签、P ...阅读全文