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
相关推荐
RuoyiOffice17 小时前
SpringBoot+Vue3 单据校验设计:保存草稿、提交审批、退回重填,各该检查什么?
spring boot·vue3·flowable·表单设计·ruoyi office·草稿保存·单据校验
Pin_Qing17 小时前
缓存能活多久,现在是个要算的参数
java·大数据·开发语言·人工智能·程序人生
jyOverQ17 小时前
从零开始学 RocketMQ(四):集群部署、消息存储与高可用【保姆级教程】
java·rocketmq·java-rocketmq
Cccp.12317 小时前
【leetcode】(十四)从暴力递归到动态规划
数据结构·算法·leetcode·动态规划
小裕哥略帅18 小时前
行级数据权限控制@DataPermission
java·开发语言
木易 士心18 小时前
Spring Boot 微信公众号后端服务开发实战指南
spring boot·后端·微信
ManageEngineITSM18 小时前
ITSM系统如何与企业微信、钉钉、飞书集成?提升工单处理效率的方法
java·大数据·开发语言·钉钉·企业微信·变更管理
ss27318 小时前
基于springboot+vue+mysql「校园二手教材循环交易」小程序,三端全跑通
vue.js·spring boot·mysql
码士集团小青1 天前
SpringBoot 集成缓存性能之王 Caffeine
spring boot·后端·缓存
凤凰院凶涛QAQ1 天前
《Java版数据结构 & 集合类剖析》Map & Set & 反射:“从哈希碰撞到红黑树转换,反射帮你扒开 HashMap 的桶数组看个究竟”
java·数据结构·算法