记录一个前端架构的想法

前端,真的是让我哭笑不得的职业,从几年前作为打酱油的理想职业到现在的热门职业,无疑在这个过程中,门槛变高了,而且还是非常高。一大堆的框架和库,像什么vue啦、react啦、angular啦、webpack啦等等等等。让人眼花缭乱

首先说说工作场景。目前做的项目是微信h5相关的,选择的是react那一套的技术栈。

现在前端js中,基本上已经是普及了模块化的概念,从很早的seajs、requirejs到现在的es自带的模块化系统,已经是越来越完善。

import request from 'superagent'
import { getToken } from "../../actions/global";
import { Toast } from "antd-mobile";
import { getQueryString, url_for, isWeiXin } from "../global_agency";

都是通过import的方式很方便的来引用各个模块里面方法,但随着项目的不断迭代,文件越来越多,就很容易会出现下面这种情况。

这就造成了模块间的方法很混乱的传递。这样的情况在一开始是无伤大雅的,项目的前期,每个模块的每个方法的作用都是很明确的对应着项目的某个地方,依然保持着简洁。但是到了项目的中后期,就会出现破坏性的混乱。为什么这样说呢?试想一下,当你某个方法使用的地方从一开始固定的一个变成了后来的不知道多少个,方法的迁移以及方法对应模块文件的迁移就会变得特别困难,虽然目前的IDE足够完善到已经可以做文件迁移后相应文件位置的批处理了,但或多或少的还是让人不安。经历过的人会明白我的感受!

混乱也意味着后期开发会越来越难,这也意味着代码耦合度高,准确的说应该是项目结构的耦合度高。一个模块到处可以使用import引入使用确实很方便,却也给我们带来了烦恼。我们要做的就是通过增加模块传递的约束条件来让结构耦合度变低,当然代价就是失去这种完全的便利,也可以说是规范这种便利。

那么我们应该怎么做呢?一图胜千言!

如上图所示,我们可以建一个中转文件,把我们觉得可以统一管理的但又比较分散的模块文件中的方法统一import到这个中转文件中,如下图:

这就有点像一个中介者模式,说形象点就像是飞机场、飞机以及工作人员的关系,假设每架飞机都有固定的工作人员,但是所有的飞机的工作人员都是由飞机场管理的,就算是这一架飞机需要另一家飞机的工作人员帮忙,也是要通过飞机场来调控。

我们的代码结构也是一样的道理。这样做的好处是在让结构清晰、可读性变强的同时,结构耦合度也降低了,到后续我们还能很方便的在各个模块内部做一些适当的封装以满足更多的需求。就像一架飞机里面有机长、副机长、乘务人员等等,他们都有不一样的工作职能。

以上就可以是一次架构提升,我相信我们的日常工作中可以有很多这样的架构提升的机会。

文章题目是关于前端架构,那么有的同学可能就会想:前端还需要架构吗?这个问题我自己也不知道,其实很早之前就听说过前端架构这个词,也只是只见过猪跑没吃到肉。我联想到前端架构之前的第一个问题是在我做的项目快要百八十个文件的时候,自己感觉有点乱,虽然自己也还可以接受,毕竟项目也是在正式环境好好地运行着,但是如果这个项目交到下一个项目负责人手里,那他的日子就不好过了,在我这里的有点乱,到了他那里就会变成非常乱。于是我还是为自己积积德,去整理一下。

于是乎我在网上下载了一本电子书,名叫《恰如其分地软件架构》,是之前有幸跟闲鱼的宗心交流的时候他推荐的(值得一提的是,大公司还是有很多有大家风范的人的)。这本书里面都是传授架构的思想,并没有很明确的架构的具体方法。所以这是一本好书,授人以鱼不如授人以渔嘛。

当我们选择了诸如react、vue、angular等这些技术栈,其实我们就已经选择了一整套的现成的架构,视图写在哪里、接口调用写在哪里、路由写在哪里等等的做法都已经有很成熟的范式给我们运用。

往往在同一个项目面前,会有三种不同的人:不做架构的人、选择做架构的人和完善架构的人。

选择了技术栈,我们还仅仅是选择做架构的人,但是还不是完善架构的人。所谓的完善架构,也就是架构提升。就跟刚才说的,我们已经选择的技术栈,选择了一套现成的架构,但是请相信我,这套架构绝对不是没有任何缺点了。我们在做项目的过程中,可能这也是发现现成架构缺点的过程,那么在这个过程中,或者在这个过程之后,我们可不可以想法设法去完备它?答案是肯定的。怎么样才算完备?这就要问我们自己了。

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

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

相关文章

java 编程原理_Java网络编程 -- 网络编程基础原理

Hello,今天记录下 Java网络编程 --> 网络编程基础原理。一起学习,一起进步。继续沉淀,慢慢强大。希望这文章对您有帮助。若有写的不好的地方,欢迎评论给建议哈!初写博客不久,我是杨展浩。这是我的第十五…

JavaScript基础之--- 深拷贝与浅拷贝

理解深拷贝和浅拷贝之前,先来看一下JavaScript的数据类型。 1、基本类型和引用类型 //案例1 var num1 1, num2 num1; console.log(num1) //1 console.log(num2) //1 num2 2; //修改num2 console.log(num1) //1 console.log(num2) //2 //案例2 var obj1 {x: 1, …

vue菜鸟从业记:完成项目最后一公里之真机测试和打包上线

最近我朋友王小闰他们公司的项目开发已经进入收尾阶段,前后端并行开发的差不多了,联调也调过了,上篇文章里也讲到了,所谓联调,就仿佛在说“我也不知道我的接口文档写的对不对,我们验证一下吧?我…

血淋淋的事实告诉你:你为什么不应该在JS文件中保存敏感信息

在JavaScript文件中存储敏感数据,不仅是一种错误的实践方式,而且还是一种非常危险的行为,长期以来大家都知道这一点。 而原因也非常简单,我们可以假设你为你的用户动态生成了一个包含API密钥的JavaScript文件: apiCall…

从零开始搭建一个vue.js的脚手架

在谷歌工作的时候,我们要做很多界面的原型,要求快速上手,灵活运用,当时用的一些现有框架,比如angular,太笨重了——尤雨溪(Vue.js 作者) vue.js是现在一个很火的前端框架&#xff0c…

更安全的Web通信HTTPS

1. HTTP协议存在的问题 阅读本篇需要对HTTP协议有最基本的了解。 借用《图解密码技术》里的图片,我们以如下一个购物场景开始介绍: 在网购过程中,如果使用纯粹的HTTP协议,那么用户的账号密码,信用卡,银行卡…

CSS入门指南——页面的水平居中

我们经常看到这样的网页,即内容水平居中在屏幕中间,左右留白。我们来给这样的布局起个名字——水平居中布局 其实要实现这样的布局十分简单,即给中间部分一个宽度,设置margin左右值为auto,如,中间部分class"main&…

mysql explain的使用

一、explain返回各列的含义: 1、table:显示这一行的数据是关于那张表的 2、type:重要的列,显示连接使用了何种类型,从最好到最差的连接类型为const、eq_reg、ref、range、index、ALL 3、possible_keys:显示…

使用 Canvas 生成公众号头图

熟悉“前端晚自修”的朋友们应该知道,我们每期的头图除了上面的文字随着每期变动以外,几乎是一模一样的(因为太懒了~)。这个头图虽然丑了一点,但是也还说的过去,毕竟是我倾尽毕生艺术细胞拼出来的&#xff…

Flask mysql 模版传参_Flask渲染Jinja2模板和传参

### Flask渲染Jinja2模板和传参:1. 如何渲染模板:* 模板放在templates文件夹下* 从flask中导入render_template函数。* 在视图函数中,使用render_template函数,渲染模板。注意:只需要填写模板的名字,不需要…

08 Spring框架 AOP (一)

首先我们先来介绍一下AOP: AOP(Aspect Orient Programming),面向切面编程,是面向对象编程OOP的一种补充。 面向对象编程是从静态角度考虑程序的结构,面向切面编程是从动态的角度考虑程序运行过程。 AOP底层…

移动spa商城优化记(一)---首屏优化篇

背景 随着公司业务的不断壮大,最近老是有用户反应公司APP内的商城打开比较慢,这可不行啊,慢了容易流失用户,流失用户减少公司业绩,公司业绩少我的年终奖就少…………,所以为了公司,也为了自己&a…

hprose for java 教程_hprose for java源码分析-4

4.1 疑窦丛生书接上回。上回说到,从HproseClient.java ------------------------- (#0)invokeHandler.handle()开始,将经历一个漫长的调用过程,下面把整个调用链粘出来,先认识下这个庞然大物。( >>> 表示调用到&#xff…

java批量提取文件夹名称_bat 批量提取指定目录下的文件名

bat 批量提取指定目录下的文件名下面是批量获取指定目录下的文件名的核心代码echo offecho text inputset inputset /p input:echo %input% is inputcd %input%rem echo onfor %%a in (*) do (echo %%a is input)cd ..如下是sql server执行对应脚本文件sqlcmd -Spcserver -dmas…

埃及分数The Rotation Game骑士精神——IDA*

IDA*:非常好用的搜索,可以解决很多深度浅,但是规模大的搜索问题。 估价函数设计思路:观察一步最多能向答案靠近多少。 埃及分数 题目大意: 给出一个分数,由分子a 和分母b 构成,现在要你分解成一…

美团扫码付的前端可用性保障实践

开篇 2017年,美团金融前端遇到了很多通用性问题,特别是在保障前端可用性的过程中,我们团队也踩了不少“坑”,在梳理完这些问题以后,我们还专门做了第31期线下沙龙给大家进行了分享。不管是在面试过程中与候选人讨论&a…

Servlet上传文件和下载文件示例

Java Web应用程序中的文件上载和下载以及常见任务。 由于最近我写了很多有关Java servlet的文章 ,因此我想提供一个使用servlet上传和下载文件的示例示例。 用例 我们的用例是提供一个简单HTML页面,客户端可以在其中选择要上传到服务器的本地文件。 在提…

java创建异步多线程_Java创建多线程异步执行实现代码解析

实现Runable接口通过实现Runable接口中的run()方法public class ThreadTest implements Runnable {public static void main(String[] args) {Thread thread new Thread(new ThreadTest());thread.start();}Overridepublic void run() {System.out.println("Runable 方式…

hive基本操作与应用

通过hadoop上的hive完成WordCount 启动hadoop Hdfs上创建文件夹 上传文件至hdfs 启动Hive 创建原始文档表 导入文件内容到表docs并查看 用HQL进行词频统计,结果放在表word_count里 查看统计结果 转载于:https://www.cnblogs.com/cairuiqi/p/9048256.html

Apache log4j是领先的日志记录框架

根据 从零周转开始的调查中, Apache log4j是领先的Java日志记录框架。 这实际上是一个非常有趣的调查。 它显示SLF4J最常用作伐木外墙,占61%。 但是,它似乎最常与Apache Log4j一起使用,52%的调查参与者都…