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
相关推荐
风中芦苇啊16 小时前
Java EasyExcel 导入通用工具类:自定义注解映射字段 + 反射机制
java·开发语言
家有娇妻张兔兔16 小时前
Java 对接 PLC 主流型号最合适的方案:Apache PLC4X 实战指南
java·开发语言·plc·modbus·数据缓存·西门子s7·apache plc4x
独行侠影a17 小时前
Rust vs. Zig:2026年系统编程语言的“双雄争霸”,谁更适合替代C++?
java·开发语言
摇滚侠17 小时前
Codebuddy 官网 Codebuddy IntelliJ IDEA 插件 阅读笔记 2
java·笔记·intellij-idea
gugucoding17 小时前
24. 【Java】枚举:更安全的常量
java·开发语言
Kyrie_kk17 小时前
Java--BigInteger 超大整数计算
java·算法
神明不懂浪漫17 小时前
【第三章】链表
开发语言·数据结构·经验分享·笔记·链表
开发者联盟league18 小时前
Java 通过 JNA 调用 C++ DLL:关键流程总结
java·c++·jna
z落落18 小时前
T-SQL 事务(Transaction)
java·数据库·sql
库克克19 小时前
【C++】智能指针
java·开发语言·c++