跳转到主要内容

去分段化

WIP

文章正在编写中

为了使文章更快发布,您可以:


🍰 Stay tuned!

情况

在项目中经常出现这样的情况:与主题领域中特定域相关的模块被不必要地去分段化并分散在项目周围

├── components/
| ├── DeliveryCard
| ├── DeliveryChoice
| ├── RegionSelect
| ├── UserAvatar
├── actions/
| ├── delivery.js
| ├── region.js
| ├── user.js
├── epics/
| ├── delivery.js
| ├── region.js
| ├── user.js
├── constants/
| ├── delivery.js
| ├── region.js
| ├── user.js
├── helpers/
| ├── delivery.js
| ├── region.js
| ├── user.js
├── entities/
| ├── delivery/
| | ├── getters.js
| | ├── selectors.js
| ├── region/
| ├── user/

问题

该问题至少表现为违反了高内聚原则和过度拉伸变更轴

如果您忽略它

  • 如果需要涉及逻辑,例如交付 - 我们必须记住它位于多个地方,并涉及代码中的多个地方 - 这不必要地拉伸了我们的变更轴
  • 如果我们需要研究用户的逻辑,我们将不得不遍历整个项目来详细研究actions、epics、constants、entities、components - 而不是将其放在一个地方
  • 隐式连接和不断增长的主题领域的不可控性
  • 使用这种方法,眼睛经常会模糊,您可能不会注意到我们如何"为了常量而创建常量",在相应的项目目录中创建垃圾场

解决方案

将与特定域/用户案例相关的所有模块 - 直接彼此相邻放置

这样,在研究特定模块时,其所有组件都并排放置,而不是分散在项目周围

它还增加了代码库的可发现性和清晰度以及模块之间的关系

- ├── components/
- | ├── DeliveryCard
- | ├── DeliveryChoice
- | ├── RegionSelect
- | ├── UserAvatar
- ├── actions/
- | ├── delivery.js
- | ├── region.js
- | ├── user.js
- ├── epics/{...}
- ├── constants/{...}
- ├── helpers/{...}
├── entities/
| ├── delivery/
+ | | ├── ui/ # ~ components/
+ | | | ├── card.js
+ | | | ├── choice.js
+ | | ├── model/
+ | | | ├── actions.js
+ | | | ├── constants.js
+ | | | ├── epics.js
+ | | | ├── getters.js
+ | | | ├── selectors.js
+ | | ├── lib/ # ~ helpers
| ├── region/
| ├── user/

See also