当前位置: 首页 > news >正文

前端工程化 - 看起来“很合理”的feature目录结构 - MT

看起来“很合理”的feature目录结构

src/├─ feature/│   └─ Order/│       ├─ index.vue│       ├─ components/│       │   ├─ OrderTable.vue│       │   ├─ FilterForm.vue│       │   ├─ AdvancedFilter.vue│       │   ├─ ExportButton.vue│       │   ├─ StatusSelect.vue│       │   └─ OrderDetailDialog.vue│       ├─ hooks/│       │   ├─ useOrder.ts│       │   └─ usePermission.ts│       ├─ api.ts│       └─ utils.ts
<template><div class="order-page"><FilterForm:filters="filters"@change="onFilterChange"/><AdvancedFilterv-if="showAdvanced":filters="filters"@change="onAdvancedChange"/><div class="actions"><ExportButton:orders="orderList":permission="permission"/><StatusSelect:selected="selectedOrders"@change="onStatusChange"/></div><OrderTable:data="orderList"@row-click="openDetail"/><OrderDetailDialogv-if="showDetail":order-id="currentOrderId"@close="showDetail = false"/></div>
</template><script setup lang="ts">
import FilterForm from './components/FilterForm.vue'
import AdvancedFilter from './components/AdvancedFilter.vue'
import ExportButton from './components/ExportButton.vue'
import StatusSelect from './components/StatusSelect.vue'
import OrderTable from './components/OrderTable.vue'
import OrderDetailDialog from './components/OrderDetailDialog.vue'import { useOrder } from './hooks/useOrder'
import { usePermission } from './hooks/usePermission'const {orderList,filters,fetchOrders,onFilterChange,onAdvancedChange,selectedOrders,onStatusChange,openDetail,showDetail,currentOrderId
} = useOrder()const permission = usePermission()
</script>

表面看:

  • 目录清晰
  • 按类型拆
  • 每个东西都有地方放

👉 但这是一个“工程灾难的温床”。

错误1:

一个业务需求会横跨所有目录

如: 高级筛选条件变更,同时影响导出逻辑

在这个目录结构下,需要改:

  • components/AdvancedFilter.tsx
  • services/orderApi.ts
  • hooks/useOrder.ts
  • components/ExportButton.tsx

一个需求,改4个层级,而不是一个业务单元

边界不是按类型,而是按变化

错误2:

所有能力默认都是同级的

在这个结构里

  • 订单列表
  • 导出
  • 状态变更
  • 高级筛选

在结构上是完全平级的,但是在业务上,他们的重要性完全不同

后果:

  • 所有组件都在首屏被 import
  • 所有逻辑都会进主 bundle
  • lazy 很难加(因为到处有依赖)

技术上”lazy”,业务上完全不”lazy”

错误3:

通常这个面会这么写:

const OrderPage = lazy(() => import('./pages/OrderPage'))

然后会说:

我们已经做了懒加载了

但在orderPage 的chunk里:

  • OrderTable
  • AdvancedFilter
  • ExportButton
  • OrderDetailModal
  • 所有 hooks
  • 所有 api

这不是拆分,这是延迟加载一坨代码

错误4:

业务逻辑 被UI吸走了

典型现象:

<!-- ExportButton.vue -->
<script setup>
if (permission.canExport && filters.status === 'completed') {enableExport.value = true
}
</script><!-- StatusSelect.vue -->
<script setup>
if (userRole === 'admin') {allowChange.value = true
}
</script>

权限,规则散落在各个组件

后果:

  • 改规则 = 全页面搜 if
  • 新人不敢动
  • 测试成本爆炸

这是边界彻底失效的信号

错误5

hook 变成”上帝对象”

// useOrder.ts
export function useOrder() {// 拉列表// 权限判断// 高级筛选逻辑// 导出状态// 详情弹窗控制
}

看似 “逻辑被抽出来了”

实际只是把混轮从组件挪到了hook

hook 不是边界, 只是函数形式的容器

http://www.jsqmd.com/news/369985/

相关文章:

  • 亲测有效!想进大厂还是国企?这几个渠道才是“上岸”捷径 - 博客万
  • 【期货量化进阶】量化交易中的信号质量评估(实战方法)
  • 2025年买前必看!市场公认的优质烫金机品牌,市面上烫金机厂商技术实力与市场口碑领航者 - 品牌推荐师
  • 多串口智能仪器仪表上位机开发。 包含实时数据监控刷新,操作点击控制,曲线数据显示,数据存储,历...
  • 拉美市场机遇爆发!美客多选品工具与技巧大公开,助你锁定美客多爆款商机 - 跨境小媛
  • 【期货量化进阶】期货量化交易中的多时间框架分析(实战技巧)
  • 好写作AI:与其偷偷用AI,不如让AI成为你的“学术品格加分项”
  • 2026年阿里巴巴/1688开户代运营服务商/公司排行榜:深圳昊客网络凭什么成为中小企业首选? - 专业GEO营销推广
  • 构建科技成果高效转化新路径——成果转化智能顾问赋能全链条服务生态
  • 【期货量化实战】量化交易策略的实盘部署指南(完整教程)
  • 2026年靠谱的电线电缆批发/出售厂家最新TOP排名:优质线缆采购指南 - 深度智识库
  • 【期货量化进阶】期货市场微观结构分析(深度解析)
  • 分析AI搜索优化公司,深圳地区哪家好 - 工业品网
  • 揭秘大润发购物卡回收高价攻略! - 团团收购物卡回收
  • AI搜索优化源头厂家如何选择,排名情况解读 - myqiye
  • 【期货量化进阶】期货量化交易中的订单执行优化(实战技巧)
  • langflow目前收到的能力
  • 2026年求推荐尼龙由壬供应商,实力强的尼龙由壬品牌有哪些 - 工业设备
  • 河北龙鹏产品靠谱吗,其性价比和运营模式在行业中排名如何 - mypinpai
  • 2026年口碑好的尼龙由壬接头供应商,产品价格多少钱 - 工业设备
  • antd的继续深耕
  • 前端工程化 - 模块化中的边界 - MT
  • 汕头海鲜火锅堂食服务商哪家好,海鲜火锅食材价格多少 - 工业品牌热点
  • 云边开源协同·智赋能效革命——MyEMS能源管理系统的破局之路
  • 前端工程化 - MT
  • 智能音乐门铃的设计
  • 输入书店图书借阅频率,按热度排序,推荐最优书架摆放位置。
  • 剖析2026年黑鱼片专业厂家,这些源头供应商值得关注 - 工业推荐榜
  • 2026年宁波口碑好的高档西服定制店排名,郡狮全手工定制服装上榜 - 工业品牌热点
  • 16天恢复“绩效分数低”封号,完整申诉思路!