LLD与HLD

在软件工程中,构建复杂系统就像建造一座城市。

没有城市规划,你不会从为一栋房子砌砖开始。你首先需要决定住宅区、商业区、电网和道路的布局。

这个城市规划就是你的高层次设计(HLD)。

一旦城市规划获批,建筑师会选取住宅区的一块土地,设计详细的房屋蓝图,具体规定房间数量、管道、电线和所需材料。

这份详细的房屋蓝图就是你的低层设计(LLD)。

两者都是必不可少的,但它们在不同层次的抽象层面上运作,服务于不同的目的。

在本章中,我们将更深入地探讨他们的差异。

什么是高层次设计(HLD)?

高级设计(HLD)定义了系统的架构。

它回答了这个问题:

"系统应该如何构建,其主要组成部分将如何相互作用?"

这里重点在于"做什么",而不是"怎么做"。

它回答了以下问题:

主要组件或微服务有哪些?(例如,用户服务、支付服务、通知服务、产品目录)。

这些组件将如何沟通?(例如,通过REST API、gRPC,或像RabbitMQ或Kafka这样的消息队列。)

将采用哪种技术栈?(例如,Java vs. Python,SQL vs. NoSQL 数据库)。

系统将如何处理可扩展性、可靠性和可用性?(例如,使用负载均衡器、数据库复制、CDN)。

有哪些第三方集成?(例如,支付用 Stripe,存储用 AWS S3)。

HLD的输出是一组架构图、数据流图和定义系统骨架的技术选择。

示例

叫车应用的HLD

服务:, , , ,Passenger ServiceDriver ServiceMatching ServiceBilling Service

通信:使用消息队列广播出行请求。 服务通过WebSockets进行实时位置更新。Matching ServicePassengerDriver

数据库:一个用于定位数据的 NoSQL 数据库,以及用于用户和账单信息的关系型 SQL 数据库。

基础设施:负载均衡器用于分发流量,服务则作为容器部署在Kubernetes上以实现可扩展性。

什么是低层设计(LLD)?

LLD聚焦于单个组件或模块,将抽象的架构概念转化为具体且可实现的细节,开发者可以直接编写代码。

它就是你决定服务内部结构的地方------包括类、方法、数据模型、设计模式和关系。

对于单个模块,它回答了以下问题:

具体有哪些课程,他们的职责是什么?

每个类的属性和方法是什么?

这些类别之间是如何关联的(继承、组合)?

哪些设计模式最合适(例如工厂、单人、策略)?

具体的方法签名有哪些,包括参数、返回类型和异常?

示例

LLD来自 网约车App。Billing Service

类别:, , , , , 。RideInvoicePaymentStrategyCreditCardPaymentWalletPayment

类别:, , , , , 。 Ride Invoice PaymentStrategy CreditCardPayment WalletPayment

接口:一个带有方法的接口。 并实现了该接口。IPaymentStrategyprocessPayment(amount)CreditCardPaymentWalletPayment

人际关系:类"has-a"对象(合成)。InvoiceRide

设计模式:策略模式用于允许用户无缝切换不同的支付方式。

主要区别:HLD与LLD一览表

高层设计(HLD)

低层设计(LLD)

重点

有哪些组成部分

每个组件的构建方式

受众

建筑师、利益相关者

工程师,开发者

抽象

系统级

模块/班级层面

文物

系统架构图,技术栈选择

类图、交互图、方法定义

示例

"我们将采用微服务架构,提供用户、订单和支付服务"

"将使用包含两种实现的接口":OrderServicePaymentProcessor

StripeProcessor

RazorpayProcessor

高性语言障碍与高级语言障碍如何协同工作

高密度发展和低语言发展不是替代选择。它们是设计过程中的连续步骤。

要求

高层设计

LLD:A 服务

LLD:服务B

LLD:C 服务

代码A

代码B。

代码C

流动

需求定义了系统应执行的任务

HLD将系统拆分为多个组成部分

LLD设计每个组件的内部结构

代码实现了LLD

复制代码
编程资源
https://pan.quark.cn/s/7f7c83756948
更多资源
https://pan.quark.cn/s/bda57957c548
相关推荐
Logic1012 小时前
C语言/数据结构字符串题解:按字符类型重排(数字→字母→符号)——三趟扫描稳定分区
c语言·数据结构·字符串·时间复杂度·计数排序·算法题·ascii
阿俊-全栈开发6 小时前
LikeShop 单商户SaaS商城分销模块二开:佣金计算与结算逻辑实现
java·开发语言·微服务·likeshop·likeshop开源商城·likeshop多商户
Logic1018 小时前
C语言/数据结构位运算题解:异或XOR找出学习计划中的“独特学习时间“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
wuminyu9 小时前
C++协程实现接收端的零拷贝Buffer管理原理剖析
java·linux·c语言·jvm·c++
小蒋学算法9 小时前
算法-交替删除操作后最后剩下的整数-跟着灵茶山艾府学算法
数据结构·算法
Zhou14113610 小时前
SpringBoot_03_Web开发
前端·spring boot·python
蜗牛互联网11 小时前
WSL Containers GA:本地AI容器的生命周期、网络与治理验收
java·网络·人工智能·后端
思麟呀11 小时前
位运算:从一个整数到一个集合
c语言·数据结构·c++·算法
龙亘川12 小时前
铭记英烈守初心,数字强基促服务:亘川智城退役军人服务系统的实践与价值
java·数据库·人工智能
OxYGC12 小时前
[AI工程] Spring AI 第廿一篇:存量 REST 接口的 MCP 化改造实录——工具从哪条路径注册、参数描述怎么写、身份怎么过去
java·人工智能·spring