当前位置:首页 > 科技  > 软件

我来教你如何组织 Vue 项目

来源: 责编: 时间:2024-05-16 17:44:24 101观看
导读介绍在启动 Vue 项目时,思考项目结构至关重要。主要考虑因素是预期项目的规模。在本篇博文中,我将探讨适用于不同规模 Vue 项目的各种结构。这个考虑与康威定律相吻合:"设计系统的组织受限于产生这些组织沟通结构的设计

介绍

在启动 Vue 项目时,思考项目结构至关重要。主要考虑因素是预期项目的规模。在本篇博文中,我将探讨适用于不同规模 Vue 项目的各种结构。这个考虑与康威定律相吻合:Sq928资讯网——每日最新资讯28at.com

"设计系统的组织受限于产生这些组织沟通结构的设计。" - 梅尔·康威Sq928资讯网——每日最新资讯28at.com

基本上,康威定律暗示了您的 Vue 应用程序的架构将固有地反映出您的组织架构,从而影响您应该如何规划项目的结构。Sq928资讯网——每日最新资讯28at.com

一些常规规则

在我们开始介绍不同的项目结构之前,我想强调一些通用的规则,这些规则适用于每种结构,大部分来自于官方的 Vue 风格指南。Sq928资讯网——每日最新资讯28at.com

基础组件命名

为您的 UI 组件使用前缀。Sq928资讯网——每日最新资讯28at.com

不好的Sq928资讯网——每日最新资讯28at.com

components/|- MyButton.vue|- VueTable.vue|- Icon.vue

好的Sq928资讯网——每日最新资讯28at.com

components/|- BaseButton.vue|- BaseTable.vue|- BaseIcon.vue

紧密耦合的组件名称

将紧密耦合的组件名称放在一起。Sq928资讯网——每日最新资讯28at.com

不好的Sq928资讯网——每日最新资讯28at.com

components/|- TodoList.vue|- TodoItem.vue|- TodoButton.vue

好的Sq928资讯网——每日最新资讯28at.com

components/|- TodoList.vue|- TodoListItem.vue|- TodoListItemButton.vue

组件名称中单词的顺序

组件名称应该以最高级别(通常是最通用的)的单词开头,并以描述性的修改词结尾。Sq928资讯网——每日最新资讯28at.com

不好的Sq928资讯网——每日最新资讯28at.com

components/|- ClearSearchButton.vue|- ExcludeFromSearchInput.vue|- LaunchOnStartupCheckbox.vue|- RunSearchButton.vue|- SearchInput.vue|- TermsCheckbox.vue

好的Sq928资讯网——每日最新资讯28at.com

components/|- SearchButtonClear.vue|- SearchButtonRun.vue|- SearchInputQuery.vue|- SearchInputExcludeGlob.vue|- SettingsCheckboxTerms.vue|- SettingsCheckboxLaunchOnStartup.vue

测试

决定如何组织您的测试以及将它们放置在何处可能是另一个博文的主题。在本文中,我们将探讨将测试放置在单独的文件夹中,其中每个测试文件反映源代码。或者,您可以将测试文件放置在它们所测试的文件旁边。这两种方法都是有效的。Sq928资讯网——每日最新资讯28at.com

方法 1:单独的测试文件夹

/vue-project|-- /src|   |-- /components|   |   |-- MyComponent.vue|   |-- /views|   |   |-- HomeView.vue|-- /tests|   |-- /components|   |   |-- MyComponent.spec.js|   |-- /views|   |   |-- HomeView.spec.js|-- package.json|-- ...

方法 2:内联测试文件

/vue-project|-- /src|   |-- /components|   |   |-- MyComponent.vue|   |   |-- MyComponent.spec.js|   |-- /views|   |   |-- HomeView.vue|   |   |-- HomeView.spec.js|-- package.json|-- ...

扁平式方法

在启动小规模 Vue 项目(如概念验证)时,您可能更喜欢简单直接的文件夹结构以避免复杂性:Sq928资讯网——每日最新资讯28at.com

/src|-- /components|   |-- BaseButton.vue|   |-- BaseCard.vue|   |-- PokemonList.vue|   |-- PokemonCard.vue|-- /composables|   |-- usePokemon.js|-- /utils|   |-- validators.js|-- /layout|   |-- DefaultLayout.vue|   |-- AdminLayout.vue|-- /plugins|   |-- translate.js|-- /views|   |-- Home.vue|   |-- PokemonDetail.vue|-- /router|   |-- index.js|-- /store|   |-- index.js|-- /assets|   |-- /images|   |-- /styles|-- /tests|   |-- ...|-- App.vue|-- main.js

原子设计

对于较大的 Vue 应用程序,采用原子设计方法可能是有利的。这种方法将组件组织成从简单到复杂的层次结构:Sq928资讯网——每日最新资讯28at.com

• 原子(Atoms):基本元素(例如按钮、图标)Sq928资讯网——每日最新资讯28at.com

• 分子(Molecules):由原子组成的组合体(例如搜索栏)Sq928资讯网——每日最新资讯28at.com

• 有机体(Organisms):复杂组件(例如导航栏)Sq928资讯网——每日最新资讯28at.com

• 模板(Templates):显示组件结构的布局Sq928资讯网——每日最新资讯28at.com

• 页面(Pages):具有真实数据的实际 UI 屏幕Sq928资讯网——每日最新资讯28at.com

这种方法确保了可扩展性和可维护性,并且能够在简单和复杂组件之间平滑过渡。Sq928资讯网——每日最新资讯28at.com

/src|-- /components|   |-- /atoms|   |   |-- AtomButton.vue|   |   |-- AtomIcon.vue|   |-- /molecules|   |   |-- MoleculeSearchInput.vue|   |   |-- MoleculePokemonThumbnail.vue|   |-- /organisms|   |   |-- OrganismPokemonCard.vue|   |   |-- OrganismHeader.vue|   |-- /templates|   |   |-- TemplatePokemonList.vue|   |   |-- TemplatePokemonDetail.vue|-- /pages|   |-- PageHome.vue|   |-- PagePokemonDetail.vue|-- /composables|   |-- usePokemon.js|-- /utils|   |-- validators.js|-- /layout|   |-- LayoutDefault.vue|   |-- LayoutAdmin.vue|-- /plugins|   |-- translate.js|-- /router|   |-- index.js|-- /store|   |-- index.js|-- /assets|   |-- /images|   |-- /styles|-- /tests|   |-- ...|-- App.vue|-- main.js

模块

随着项目规模的扩大,考虑采用模块化的单块架构。这种结构封装了每个功能或领域,增强了可维护性,并为可能的演变向微服务方向做好了准备:Sq928资讯网——每日最新资讯28at.com

/src|-- /core|   |-- /components|   |   |-- BaseButton.vue|   |   |-- BaseIcon.vue|   |-- /models|   |-- /store|   |-- /services|   |-- /views|   |   |-- DefaultLayout.vue|   |   |-- AdminLayout.vue|   |-- /utils|   |   |-- validators.js|-- /modules|   |-- /pokemon|   |   |-- /components|   |   |   |-- PokemonThumbnail.vue|   |   |   |-- PokemonCard.vue|   |   |   |-- PokemonListTemplate.vue|   |   |   |-- PokemonDetailTemplate.vue|   |   |-- /models|   |   |-- /store|   |   |   |-- pokemonStore.js|   |   |-- /services|   |   |-- /views|   |   |   |-- PokemonDetailPage.vue|   |   |-- /tests|   |   |   |-- pokemonTests.spec.js|   |-- /search|   |   |-- /components|   |   |   |-- SearchInput.vue|   |   |-- /models|   |   |-- /store|   |   |   |-- searchStore.js|   |   |-- /services|   |   |-- /views|   |   |-- /tests|   |   |   |-- searchTests.spec.js|-- /assets|   |-- /images|   |-- /styles|-- /scss|-- App.vue|-- main.ts|-- router.ts|-- store.ts|-- /tests|   |-- ...|-- /plugins|   |-- translate.js

功能分割设计

功能分割设计是一种组织大型和长期项目以便更易于管理和扩展的方法。此方法将应用程序分成不同的层,每个层具有特定的角色:Sq928资讯网——每日最新资讯28at.com

• 应用程序(App):全局设置、样式和提供者。Sq928资讯网——每日最新资讯28at.com

• 页面(Pages):使用实体、功能和小部件构建完整页面。Sq928资讯网——每日最新资讯28at.com

• 小部件(Widgets):将实体和功能组合成一致的 UI 块,如 IssueList 或 UserProfile。Sq928资讯网——每日最新资讯28at.com

• 功能(Features):处理添加价值的用户交互,例如发送评论、添加到购物车或搜索用户。Sq928资讯网——每日最新资讯28at.com

• 实体(Entities):表示核心业务模型,如用户、产品和订单。Sq928资讯网——每日最新资讯28at.com

• 共享(Shared):提供与特定业务逻辑无关的可重用实用程序和组件,如 UIKit、库和 API。Sq928资讯网——每日最新资讯28at.com

/src|-- /app|   |-- App.vue|   |-- main.js|   |-- app.scss|-- /processes|-- /pages|   |-- Home.vue|   |-- PokemonDetailPage.vue|-- /widgets|   |-- UserProfile.vue|   |-- PokemonStatsWidget.vue|-- /features|   |-- pokemon|   |   |-- CatchPokemon.vue|   |   |-- PokemonList.vue|   |-- user|   |   |-- Login.vue|   |   |-- Register.vue|-- /entities|   |-- user|   |   |-- userService.js|   |   |-- userModel.js|   |-- pokemon|   |   |-- pokemonService.js|   |   |-- pokemonModel.js|-- /shared|   |-- ui|   |   |-- BaseButton.vue|   |   |-- BaseInput.vue|   |   |-- Loader.vue|   |-- lib|   |   |-- api.js|   |   |-- helpers.js|-- /assets|   |-- /images|   |-- /styles|-- /router|   |-- index.js|-- /store|   |-- index.js|-- /tests|   |-- featureTests.spec.js

这种设置非常适合大型项目,因为它使得项目更容易扩展和保持整洁。要了解有关这些层如何工作的更多详细信息,请查看官方的功能分割设计文档Sq928资讯网——每日最新资讯28at.com

图片图片Sq928资讯网——每日最新资讯28at.com

微前端

微前端将微服务的思想应用于 Web 应用程序的前端部分。这意味着不同的团队可以独立处理 Web 应用程序的不同部分,而不会相互干扰。每个部分,或“微前端”,都可以独立运行,并可以单独更新。这是一个 SPA 的基本概述。请注意,本文不会深入介绍微前端的工作原理。Sq928资讯网——每日最新资讯28at.com

• 应用程序 Shell:这是控制主要布局和站点路由的主要控制器。它将所有微前端连接在一起。Sq928资讯网——每日最新资讯28at.com

• 分解的 UI:每个微前端都专注于应用程序的特定部分。它们可以使用不同的技术进行开发,并可以分别更新。Sq928资讯网——每日最新资讯28at.com

图片图片Sq928资讯网——每日最新资讯28at.com

主要优点是微前端让团队可以在不等待其他团队的情况下更新应用程序的各个部分,这可以加快开发速度。然而,这种设置可能会使应用程序更复杂,难以管理和保持一致。Sq928资讯网——每日最新资讯28at.com

有用的资源:

• 微前端 - 将微服务思想扩展到前端开发Sq928资讯网——每日最新资讯28at.com

• 马丁·福勒关于微前端Sq928资讯网——每日最新资讯28at.com

这种策略非常适合具有多个开发团队的大型、复杂项目。每个团队都可以专注于特定的业务需求,而不会影响其他团队的工作,可能使用最适合其部分的技术。Sq928资讯网——每日最新资讯28at.com

结论

图片图片Sq928资讯网——每日最新资讯28at.com

希望现在清楚了,您应该选择一个反映您组织规模和复杂性的结构。此外,更先进的结构将值得一篇独立的博文;我只是想为您提供一个良好的概述。一般来说,您的团队越大、越复杂,或者拥有更多的团队,您就越应该朝着更好地分隔这些概念的结构努力。基本上,您团队的结构将指导您确定最适合您需求的项目结构。Sq928资讯网——每日最新资讯28at.com

方法
Sq928资讯网——每日最新资讯28at.com

描述
Sq928资讯网——每日最新资讯28at.com

优点
Sq928资讯网——每日最新资讯28at.com

缺点
Sq928资讯网——每日最新资讯28at.com

扁平式方法Sq928资讯网——每日最新资讯28at.com

简单的结构,适合小项目或概念验证。
Sq928资讯网——每日最新资讯28at.com

- 易于实施 - 最小设置
Sq928资讯网——每日最新资讯28at.com

- 不可扩展 - 随着项目增长而混乱
Sq928资讯网——每日最新资讯28at.com

原子设计Sq928资讯网——每日最新资讯28at.com

基于组件复杂性的分层结构。
Sq928资讯网——每日最新资讯28at.com

- 可扩展 - 有组织 - 可重用组件
Sq928资讯网——每日最新资讯28at.com

- 管理层面的开销 - 复杂的设置
Sq928资讯网——每日最新资讯28at.com

模块Sq928资讯网——每日最新资讯28at.com

封装功能的模块化结构。
Sq928资讯网——每日最新资讯28at.com

- 可扩展 - 封装特性
Sq928资讯网——每日最新资讯28at.com

- 可能存在重复 - 可能变得复杂
Sq928资讯网——每日最新资讯28at.com

功能分割设计Sq928资讯网——每日最新资讯28at.com

将项目组织成功能层和切片。
Sq928资讯网——每日最新资讯28at.com

- 高内聚 - 明确的功能分离
Sq928资讯网——每日最新资讯28at.com

- 初始复杂性 - 需要彻底规划
Sq928资讯网——每日最新资讯28at.com

微前端Sq928资讯网——每日最新资讯28at.com

应用程序的每个部分都可以单独部署。
Sq928资讯网——每日最新资讯28at.com

- 独立部署 - 可扩展
Sq928资讯网——每日最新资讯28at.com

- 复杂性高 - 需要团队之间的协调
Sq928资讯网——每日最新资讯28at.com


Sq928资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-88724-0.html我来教你如何组织 Vue 项目

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: C#异步 Task:提升程序性能的利器

下一篇: 我们一起聊聊结构体及其方法的使用法门

标签:
  • 热门焦点
  • 官方承诺:K60至尊版将会首批升级MIUI 15

    官方承诺:K60至尊版将会首批升级MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版将会搭载天玑9200+处理器和独显芯片X7的同时,Redmi给出了官方承诺,K60至尊重大更新首批升级,会首批推送MIUI 15。也就是说虽然
  • 5月iOS设备性能榜:M1 M2依旧是榜单前五

    5月iOS设备性能榜:M1 M2依旧是榜单前五

    和上个月一样,没有新品发布的iOS设备性能榜的上榜设备并没有什么更替,仅仅只有跑分变化而产生的排名变动,刚刚开始的苹果WWDC2023,推出的产品也依旧是新款Mac Pro、新款Mac Stu
  • 容量越大越不坏?24万块硬盘故障率报告公布 这些产品零故障

    容量越大越不坏?24万块硬盘故障率报告公布 这些产品零故障

    8月5日消息,云存储服务商Backblaze发布了最新的硬盘故障率报告,年故障率有所上升。Backblaze发布的硬盘季度统计数据,其中包括故障率等重要方面。这些结
  • Automa-通过连接块来自动化你的浏览器

    Automa-通过连接块来自动化你的浏览器

    1、前言通过浏览器插件可实现自动化脚本的录制与编写,具有代表性的工具就是:Selenium IDE、Katalon Recorder,对于简单的业务来说可快速实现自动化的上手工作。Selenium IDEKat
  • SpringBoot中使用Cache提升接口性能详解

    SpringBoot中使用Cache提升接口性能详解

    环境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架从 3.1 开始,对 Spring 应用程序提供了透明式添加缓存的支持。和事务支持一样,抽象缓存允许一致地使用各
  • 不容错过的MSBuild技巧,必备用法详解和实践指南

    不容错过的MSBuild技巧,必备用法详解和实践指南

    一、MSBuild简介MSBuild是一种基于XML的构建引擎,用于在.NET Framework和.NET Core应用程序中自动化构建过程。它是Visual Studio的构建引擎,可在命令行或其他构建工具中使用
  • 虚拟键盘 API 的妙用

    虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 三星电子Q2营收60万亿韩元 存储业务营收同比仍下滑超过50%

    三星电子Q2营收60万亿韩元 存储业务营收同比仍下滑超过50%

    7月27日消息,据外媒报道,从三星电子所发布的财报来看,他们主要利润来源的存储芯片业务在今年二季度仍不乐观,营收同比仍在大幅下滑,所在的设备解决方案
  • 电博会与软博会实现

    电博会与软博会实现"线下+云端"的双线融合

    在本次“电博会”与“软博会”双展会利好条件的加持下,既可以发挥展会拉动人流、信息流、资金流实现快速交互流动的作用,继而推动区域经济良性发展;又可以聚
Top