<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>代码组织 | 锤子前端</title><description>Now vibe coding, so learning hammer FE ?</description><link>https://channel.meo-ai.com</link><item><title>《垂直代码库：告别按类型分层，拥抱按业务域组织》</title><link>https://channel.meo-ai.com/posts/599</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/599</guid><pubDate>Sat, 18 Apr 2026 08:12:54 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《垂直代码库：告别按类型分层，拥抱按业务域组织》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E4%BB%A3%E7%A0%81%E7%BB%84%E7%BB%87&quot; title=&quot;#代码组织&quot;&gt;#代码组织&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1&quot; title=&quot;#架构设计&quot;&gt;#架构设计&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Monorepo&quot; title=&quot;#Monorepo&quot;&gt;#Monorepo&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23React&quot; title=&quot;#React&quot;&gt;#React&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B&quot; title=&quot;#软件工程&quot;&gt;#软件工程&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;&lt;br /&gt;本文主张前端代码库应从&quot;水平分层&quot;（按 components/hooks/utils 技术类型划分）转向&quot;垂直切片&quot;（按业务域/功能域组织）。作者以 Sentry 代码库十年演进为例，指出水平分层会导致代码分散、认知负荷高、耦合混乱；而垂直组织将同一业务域的组件、工具、类型内聚到一起，配合 Monorepo 的显式边界（exports/eslint-plugin-boundaries），能显著提升可维护性。虽然确定正确的垂直划分需要更多团队沟通，但这是支撑代码库长期演进的必要投资。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;&lt;br /&gt;- 水平分层的隐患：把代码按 components / hooks / utils / types 分类虽然上手简单，但随着项目膨胀，同一业务逻辑会被拆得七零八落——比如 PageFilters 的组件、类型、工具函数散落在三个目录，改一个小需求要跳来跳去， cognitive load 直接拉满&lt;br /&gt;- 垂直切片的核心思想：不按&quot;技术类型&quot;而按&quot;业务域&quot;分组，把同一个功能域（如 dashboard、profiling、billing）相关的组件、Hook、工具、类型全部收进一个目录；就像当年我们把 HTML/CSS/JS 从三层文件合并成组件一样，这次是更高维度的&quot;关注点内聚&quot;&lt;br /&gt;- 与团队结构天然对齐：现代产品团队通常是端到端的功能团队（dashboard 团队、replay 团队），垂直代码结构让 CODEOWNERS 和包边界直接对应团队职责，谁负责什么一目了然&lt;br /&gt;- 解决跨域复用焦虑：不是所有代码都严格属于某个页面，像 PageFilters 这种被多页面使用的通用能力，完全可以作为独立垂直域存在；关键是按&quot;逻辑关联&quot;而非&quot;物理位置&quot;来划分&lt;br /&gt;- 用边界守护架构：垂直化后还需降低耦合，推荐通过 Monorepo + package.json#exports 显式暴露公共 API，或借助 eslint-plugin-boundaries 禁止深路径导入，把&quot;私有实现&quot;真正保护起来&lt;br /&gt;- 没有银弹，但值得投入：确定合理的垂直域确实比&quot;丢进 utils&quot;更难，也可能出现不同团队重复造轮子；但作者认为这恰恰促进了团队沟通，而沟通本就是软件工程最难也最重要的部分&lt;br /&gt;&lt;br /&gt;文章URL：&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://tkdodo.eu/blog/the-vertical-codebase&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://tkdodo.eu/blog/the-vertical-codebase&quot;&gt;https://tkdodo.eu/blog/the-vertical-codebase&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://tkdodo.eu/blog/the-vertical-codebase&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Let&apos;s take a look at why the common, horizontal code structure is not ideal, where it breaks down, and what we can do about it.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;tkdodo.eu&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;The Vertical Codebase&quot; src=&quot;/static/https://cdn4.telesco.pe/file/UQNHQ5CBOo9YPc282-wjXkZj4PZ5DB5zFN6AcdBCGzJE5sJnuaw-V2V6sKibIvd5vfa9ekRtzuXoI6OnOZ_k1DF5YFoVfMgJHKVvA63WGg59BKOYzxTqmJaAxqyMw3QUQzlh3zNnw-BVDfmzabcFfGTp6KoV8nnXsMcAzd22mQ1iQg3o9vmfA9Scfo5p3viArCt5tGzxf-n2LhFYLOFxTKAPQtqhrcCjrFgB_maNEZlyJsUk_23V0odEQqqA-gZltg6z0v0kM7ke4letXnHXh4H8E2GYkTFJeFigVwwOpDsOhjT3Uq5wsaF5jXy-cAm6b1bXPEjfKWYiK3s8IC41Yg.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;The Vertical Codebase&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Let&apos;s take a look at why the common, horizontal code structure is not ideal, where it breaks down, and what we can do about it.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item></channel></rss>