发布于 2026-01-05 5 阅读
0

高级 React 项目的文件夹结构技巧

高级 React 项目的文件夹结构技巧

React 提供了极大的灵活性,但随之而来的是设计自身架构的责任。精心构建应用程序的结构至关重要,这能确保应用程序用户友好、易于理解,并便于未来扩展。一些成熟的架构方法可以显著提升 React 项目的组织性。接下来,我将指导您如何将其中一种方法融入到 React 文件夹结构中。

  • 清洁建筑
  • 垂直切片架构
  • 特征切片设计(FSD)

传统方法与简洁架构

在应用于 React 应用的传统 Clean Architecture 方法中,各个功能被组织成不同的层,每一层都有其特定的职责和清晰的边界。这种功能分离使得代码库结构良好且易于维护。

React 中推荐的文件夹结构:

组件层:此层对应于 React 中的 UI 组件。它负责处理用户交互和应用程序的渲染。它可以根据需要引用容器层和核心层。

容器层:该层负责实现应用程序逻辑。它包含连接到状态(使用 Redux 或 Context API)并处理数据获取和操作的组件。它可能会引用核心层来实现特定领域的逻辑。

服务层:这一层类似于整洁架构中的应用层。它实现用例和应用服务,并管理诸如 API 端点、数据获取和外部服务等契约。它可能会引用核心层来实现领域逻辑。

实用工具层:这一层类似于基础设施层,负责处理网络请求、本地存储和其他外部依赖项等底层问题。它可能同时引用核心层和服务层。

核心层:该层负责业务逻辑和规则。它确保领域模型始终有效,并处理核心功能。它不依赖于其他层。

文件夹结构示例:

src/
|-- Components/
|   |-- Header/
|   |   |-- Header.js
|   |   |-- Header.css
|   |-- ...
|
|-- Containers/
|   |-- UserContainer/
|   |   |-- UserContainer.js
|   |   |-- UserContainer.css
|   |-- ...
|
|-- Services/
|   |-- AuthService.js
|   |-- ApiClient.js
|   |-- ...
|
|-- Utilities/
|   |-- LocalStorage.js
|   |-- HttpClient.js
|   |-- ...
|
|-- Core/
|   |-- User.js
|   |-- Product.js
|   |-- ...
|
|-- App.js
|-- index.js
|-- ...

Enter fullscreen mode Exit fullscreen mode

这种结构体现了符合整洁架构原则的关注点分离,每一层都负责其特定的职责。请注意,这只是一个建议的结构,您可以根据应用程序的具体需求进行进一步的定制。

这些都是深入了解 React 中“整洁架构”的绝佳参考资料!以下是它们:

  1. 使用 React 实现整洁架构(文章):本文提供了一份关于如何在 React 应用中实现整洁架构的实用指南。文章逐步讲解了如何将 React 应用转换为整洁架构结构,并通过实践操作帮助读者理解这一概念。

  2. frontend-clean-architecture(GitHub 仓库):此 GitHub 仓库提供了一个使用 Clean Architecture 原则和 TypeScript 构建的 React 应用的具体示例。它为探索如何在实际项目中实现 Clean Architecture 提供了一个宝贵的资源,展示了最佳实践和设计模式。

  3. react-clean-architecture(GitHub 仓库):该仓库提供了一个使用 Clean Architecture 构建的 React 应用的精彩示例。它深入剖析了如何在 React 项目中组织代码,以提高可维护性、可扩展性和可测试性。对于寻求在 React 中实践 Clean Architecture 的开发者来说,这是一个极具价值的资源。

垂直切片架构

在应用于 React 应用的垂直切片架构中,关注点从按技术层划分关注点转移到将系统分解为独立的业务功能。每个业务功能随后又被进一步细分为特性或切片,类似于目录边界上下文包含产品聚合,而产品聚合又包含各种特性或切片,例如 CreateProduct 和 UpdateProduct。每个特性/切片都是完全独立的,从而最大限度地降低了更改时产生副作用的风险。

在这种架构中,每个用户请求都被视为一个独立的用例,每个请求都可以分为用于写入操作的“命令”请求和用于读取操作的“查询”请求,这与命令和查询职责分离(CQRS)模式的原则相一致。

垂直切片架构并非跨层耦合组件或模块,而是强调切片内部的垂直耦合,同时力求最大限度地减少切片之间的耦合。这种方法允许在不影响系统其他部分的情况下,替换或修改特定于某个功能或切片的底层架构组件(例如数据库、消息代理),这得益于该层级实现的隔离。

在 React 应用的上下文中,垂直切片架构鼓励你将与特定功能或用户故事相关的代码集中放在一个文件夹中。这包括 React 组件、容器、服务以及与该功能相关的逻辑。其理念是将特定功能所需的一切都包含在它自己的切片中,这样你就可以在不影响应用程序其他不相关部分的情况下进行更改或更新。

以下是使用垂直切片架构的 React 应用程序的示例文件夹结构:

/src
 |-- features
 |
 |   |-- FeatureA
 |   |   |--    FeatureAEndpoint.js
 |   |   |--    FeatureAHandler.js
 |   |--components
 |   |   |--      FeatureAComponent.js
 |   |-- containers
 |   |   |--      FeatureAContainer.js
 |   |--services
 |   |   |--      FeatureAService.js
 |
 |   |-- FeatureB
 |   |   |--    FeatureBEndpoint.js
 |   |   |--    FeatureBHandler.js
 |   |--components
 |   |   |--      FeatureBComponent.js
 |   |-- containers
 |   |   |--      FeatureBContainer.js
 |   |--services
 |   |   |--      FeatureBService.js
 |   |   |--   
 |
 |--shared
 |   |-- components
 |   |   |--    SharedComponentA.js
 |   |--containers
 |   |   |--    SharedContainerX.js
 |
 |--services
 |   |-- ApiService.js
 |-- core
 |   |-- DomainLogic.js 
Enter fullscreen mode Exit fullscreen mode

在这种结构中:
features是主目录,每个功能都组织成一个独立的子目录。
每个功能(例如,FeatureA、FeatureB)包含:
FeatureAEndpoint.js 和 FeatureAHandler.js,用于处理请求和该功能特有的逻辑;
components,用于存放与该功能相关的 React 组件;
containers,用于存放更高级别的组件或用于管理功能状态或逻辑的容器;
services,用于存放特定于该功能的服务;
shared,用于存放多个功能共用的组件和容器;
services,用于存放应用程序中使用的任何实用服务或 API 服务;
core,用于存放不与任何特定功能关联的领域逻辑或业务逻辑。
借助这种结构,您可以独立地开发每个功能,并且对一个功能所做的任何更改对应用程序其他部分的影响都极小。这种模块化方法还有助于提高代码的可重用性、可维护性和可测试性。它与封装和高内聚的原则非常契合。

特征切片设计(FSD)

功能切片设计 (FSD) 是最流行的设计方法之一,它根据业务和职责范围对应用程序进行划分。这种方法常用于软件开发,可用于前端和移动应用程序。FSD。

FSD 的核心思想是将应用程序分解成嵌套的更小单元。第一层是“层”,每一层又可以包含一些更小的、易于管理的单元,称为“切片”。切片还可以进一步细分为“段”。

如果您想深入了解这方面的内容,可以访问Feature-Sliced Design (FSD) 网站,探索更多 FSD 示例

结论:
在 React 应用中,Clean Architecture 和 Vertical Slice Architecture 都为代码结构化提供了有效的方法。Clean Architecture 强调层分离,通过将业务逻辑与外部关注点隔离,确保了可维护性和稳定性,使其非常适合规模更大、更复杂的应用。相比之下,Vertical Slice Architecture 提倡功能内部的高内聚性,降低功能之间的耦合度,从而实现更高效的功能特定开发和测试。两种架构的选择取决于项目的具体需求,Clean Architecture 更注重长期可维护性,而 Vertical Slice Architecture 则在规模较小、目标明确的功能开发中表现出色。

文章来源:https://dev.to/fpaghar/folder-structuring-techniques-for-beginner-to-advanced-react-projects-30d7