23. 如何设计一个前端项目

23. 如何设计一个前端项目

      • 设计项目需要关注的重点:
    • 技术方案设计和选型
      • 技术选型的影响因素
      • 前端框架和工具选型
    • 多人协作和团队规范
      • 使用一直的代码开发规范
      • 制定合适的代码流程规范

设计项目需要关注的重点:

  1. 技术方案设计和选型
  2. 多人协作和团队规范的制订

技术方案设计和选型

从0开始搭建项目,需要考虑一下技术选型:

  1. 前端框架和脚手架
  2. 状态管理工具
  3. 路由管理
  4. 代码构建和编译方案

需要基于项目定位(To B还是To C), 用户量体系,项目复杂度因素,进行技术方案的设计

技术选型的影响因素

一般来说从头开始搭建前端项目:

  1. 项目规模如何,功能交互是否复杂,面向哪些用户
  2. 是否存在多人协作?团队规模大概是怎样的?
  3. 团队成员技术栈如何?对新技术的接受程度怎么样?
  4. 还是否有现有技术方案可以参考?是否需要进行调整?

为什么要考虑这些问题?

  • 项目规模和功能交互会影响框架和工具的选型轻量项目可能react/Vue框架比较灵活,大型项目还可使用Angular全家桶。
  • 用户体系会影响系统兼容性的倾向,比如用户受众年龄偏大,则需要考虑使用机型性能可能相对较差,需要兼容的机型品牌比较多。
  • 存在多人协作需要考虑完善团队规范,同时尽量使用工具来保证流程规范。
  • 团队技术栈倾向同样影响技术选型,如果有县城的技术方案和项目安利,可以考虑是否符合实际需要,是团队成员熟练的工具可以避免很

前端框架和工具选型

对于前端框架和工具你的使用,项目面临两个选择:

  1. 使用开源/现有框架
  2. 造轮子
    使用开源的好处是,它们有完整详细文档,丰富的社区资源。在遇到问题的时候也能通过issues和Stack Overflow来查找。
    前端发展到现在,几大框架的之间的差距越来越小,目前主流的三大框架包括 Angular、React 和 Vue可以进行选型和对比:
框架优势不足
Angular提供完整的开发规范和解决方案,解决了多人协作、大型应用的痛点基于大型复杂项目设计,解决方案大而全导致相对笨重设计和使用的概念很多(如依赖注入/注入器/令牌、指令、模块化、AOT 等),入门成本较大
React概念较少,对前端编码侵入较少,开发者只需要掌握 Javascript 便可实现大多数功能框架(库)轻量,可灵活搭配各种状态管理工具、脚手架等进行开发对于大型复杂项目,需要自行搭配其他配套工具来解决
Vue对新人友好、文档和社区较完善框架(库)轻量,可灵活搭配各种工具进行开发,官方也提供完整的全家桶解决方案如指令和语法糖有一定的概念门槛对于大型复杂项目,需要自行搭配其他配套工具来解决

除了热门框架,有能力的团队可以选择贴合自身项目需要,相对小众的框架和工具,甚至可以自行研发合适自己的。

如果想要做自己的框架,尤其是想要在业务中尝试使用,需要万分谨慎,除了需要贴合业务实际需要,更要具备足够的责任感,需要提供友好的文档和API给其他人,不然对项目的维护,新加入的成员来说,会带来毁灭性的开发体验。
技术选型没有标准答案,很多时候我们还需要结合项目现状,选择适合团队使用的技术栈。

多人协作和团队规范

相比项目的搭建和快速上线,项目的维护永远是程序员的大头。搭建一套代码合流程规范,不知将规范写的淋漓尽致,更是需要使用流程化的工具来确保大家遵守规范。

使用一直的代码开发规范

好的编码习惯很重要,语义化的变量命名,适当的注释,都会对代码的可读性有很大的提升。但是每个人习惯都不一样,所以我们需要有统一的代码规范。
可以是使用一些工具来确保代码符合规范:

  • 使用 Eslint 检测代码规范;
  • 使用 Prettier 自动化格式代码;
  • 使用 Git Commit Hooks 拒绝不符合规范的代码提交;
  • 使用流水线检测出不规范的代码,并拒绝合入主干分支;
  • 使用流水线检测出不规范的代码,并拒绝进入发布流程。

制定合适的代码流程规范

一般来说开发流程会包括:

  • git 创建分支过程 : 分支命名,是否需要关键需要单或者bug单
  • git提交代码过程 : 检查代码是否符合规范,只允许合格代码进行提交。
  • 分支提交过程:需要进行交叉Code Review , 对方同意后才允许合入代码
  • 合入主干过程:对代码进行自动化构建和测试,功能正常且符合规范的代码才可以合并主干、
  • 代码发布过程:自动拉去主干分支,创建发布分支,对代码进行自动化构建和测试,正常后会开始进入灰度发布流程。
    通过自动化的工具我们同样可以确保以上流程按预期进行,很多团队也会使用持续继承(CI)和持续部署(CD)。CI/CD在项目中的落地,很多时候会表现为流水线的开发模式。建立完成的 CI/CD 流水线,除了可以按照规范约束每次代码提交的质量,还可以有效地提高效率。越是大规模的团队越能体会搭配CI/CD带来的便利。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/219427.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dialog 在xml文件进行了自适应宽,但是失效了

如下图 讲述了为什么已经设置好了dialog的宽高 到了显示的时候就会失效的原因 解决方式 : 在自定的dialog中的onstart()方法中进行重新设置宽高 Window window getWindow();WindowManager.LayoutParams lp window.getAttributes();lp.height LinearLayout.La…

【操作系统的IO模型有哪些?】

操作系统的IO模型有哪些? 操作系统中的IO模型逐一拓展同步阻塞IO模型同步非阻塞IO模型IO复用模型信号驱动IO模型异步IO模型 操作系统中的IO模型 为了保护操作系统的安全,通过缓存加快系统读写,会将内存分为用户空间和内存空间两个部分。如果…

想学精MySQL,得先捋一捋高可用架构

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

ARM day8

1.题目&#xff1a;主机获取从机里面的温湿度数据&#xff0c;并打印出来 结果&#xff1a; 代码&#xff1a; main.c #include "iic.h"#include "si7006.h"void delay(int ms){int i,j;for(i0;i<ms;i){for(j0;j<2000;j);}}int main(){short tem;…

关于“Python”的核心知识点整理大全11

目录 ​编辑 6.2.4 修改字典中的值 6.2.5 删除键—值对 注意 删除的键—值对永远消失了。 6.2.6 由类似对象组成的字典 6.3 遍历字典 6.3.1 遍历所有的键—值对 6.3.2 遍历字典中的所有键 往期快速传送门&#x1f446;&#xff08;在文章最后&#xff09;&#xff1a; 6.…

【网络编程之初出茅庐】

前言&#xff1a;本章主要先讲解一些基本的网络知识&#xff0c;先把基本的知识用起来&#xff0c;后续会更深入的讲解底层原理。 网络编程的概念 网络编程&#xff0c;指网络上的主机&#xff0c;通过不同的进程&#xff0c;以编程的方式实现网络通信&#xff08;或称为网络数…

网络基础(九):VLAN的概述及配置

目录 前言 一、分割广播域的方法 二、VLAN 1、VLAN的概述及优势 1.1VLAN的概述 1.2VLAN的优势 2、VLAN的种类 3、VLAN的三种端口类型 4、VLAN 的工作原理 4.1VLAN数据帧 4.2VLAN的范围 4.2VLAN的access类型工作原理 4.3VLAN的trunk类型工作原理 4.4VLAN的Hybird类…

CentOS7安装MySQL8.0

一、使用Yum安装 1. 使用wget下载MySQL的rpm包 wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm2. 安装下载好的rpm包 yum localinstall mysql80-community-release-el7-3.noarch.rpm 3. 安装mysql&#xff08;该步可能出现问题&#xff09; yum…

JAVAEE-8-线程池

池 我们之前也接触过,比如说常量池,数据库连接池,线程池,进程池,内存池等等, 池的共性: 1.提前把要用的对象准备好 2.把用完的对象也不要立即释放,先留着以备下次使用 来提高效率!!! 最开始,进程能够解决并发编程的问题,因为频繁创建销毁进程的开销成本太大了,所以我们引…

新版Spring Security6.2案例 - Basic HTTP Authentication

前言&#xff1a; 书接上文&#xff0c;翻译官网Authentication的Username/Password这页&#xff0c;接下来继续翻译basic的这页&#xff0c;因为官网说的都是原理性的&#xff0c;这边一个小案例关于basic http authentication。 Basic Authentication 本节介绍 HTTP 基本身…

Unity 通过鼠标控制模拟人物移动和旋转视角

要通过鼠标控制并模拟人物移动和转换视角&#xff0c;将会使用射线检测、鼠标点击和鼠标水平移动&#xff0c;配合物体旋转和移动方法共同实现。 首先搭建个由一个Plane地板和若干cube组成的简单场景&#xff1a; 其次创建一个Capsule作为移动物体&#xff0c;并把摄像头拉到该…

腾讯云优惠券领取指南

腾讯云优惠券是降低云服务成本的有效手段&#xff0c;无论是新用户还是老用户&#xff0c;都可以通过下面方法领取到适合自己的优惠券。 1、腾讯云优惠券领取 领取入口&#xff1a;txy.ink 2、腾讯云优惠券介绍 腾讯云优惠券包括代金券和折扣券&#xff0c;代金券可以在结算…

【CCF BDCI 2023】多模态多方对话场景下的发言人识别 Baseline 0.71 CNN 部分

【CCF BDCI 2023】多模态多方对话场景下的发言人识别 Baseline 0.71 CNN 部分 概述CNN 简介数据预处理查看数据格式加载数据集 图像处理限定图像范围图像转换加载数据 CNN 模型Inception 网络ResNet 残差网络总结参数设置 训练 Train模型初始化数据加载训练超参数训练循环 验证…

Python 从入门到精通 学习笔记 Day04

Python 从入门到精通 第四天 今日目标 数据类型-又见str、数据类型-又见list 列表切片&排序&反转&循环、字典 数据类型 - 又见str 字符串定义 字符串是一个有序的字符的集合&#xff0c;用于在计算机里存储和表示文本信息 创建 a "Hello ,my name is Ha…

Android---Kotlin 学习005

substring 字符串截取。相加与 java&#xff0c;kt 里面的 substring 函数支持 IntRange 类型&#xff08;表示一个整数范围的类型&#xff09;的参数&#xff0c;until 创建的范围不包括上限值。 const val NAME "Jimmys friend" fun main(){val index NAME.ind…

TrustGeo代码理解(二)test.py

代码链接&#xff1a;https://github.com/ICDM-UESTC/TrustGeo 一、加载检查点&#xff08;checkpoint&#xff09;并进行测试 # -*- coding: utf-8 -*-"""load checkpoint and then test """ 该脚本的目的是加载之前训练过的模型的检查点&am…

【Linux】基于sed正则指令修改application.properties属性值

文章目录 背景sed介绍演示结果 背景 服务器上搭建了SpringCloud微服务&#xff0c;每个服务中都有application.properties文件&#xff0c;在部署过程中需要修改每个微服务的redis.ip和redis.port。如果手动去修改会很麻烦&#xff0c;所以下面写了一个shell脚本&#xff08;基…

NLP知识点 - perplexity 困惑度

(一) Perplexity 困惑度&#xff08;Perplexity&#xff0c;缩写为PPL&#xff09;是衡量语言模型好坏的一个常用指标。 语言模型&#xff08;language model&#xff09;是用来预测句子中的next word的概率分布&#xff08;probability distribution&#xff09;&#xff0c…

idea的快捷键

1.调整字体的大小 文件夹的循序:setting-Editor-Font 界面: 2.删除当前行 文件夹的循序:setting-Keymap-DeleteLine 界面: 3.导入该行需要的类 文件夹的循序:setting-Editor-General-Auto import 界面: 4.格式化代码 文件夹的循序:setting-keymap-Reformat 界面: 5.快速…

大模型微调方法:冻结方法 Freeze、P-Tuning 系列、LoRA、QLoRA

大模型微调方法 冻结方法 FreezeP-Tuning 系列Prefix-TuningPrompt TuningP-Tuning v1P-Tuning v2 LoRAQLoRA 冻结方法 Freeze 方法意思是&#xff0c;只用少部分参数训练&#xff0c;把模型的大部分参数冻结。 只要设置微调层的参数&#xff1a; # 遍历模型的所有参数和名称…