近期前端开发总结之架构与代码规范

近期做了一些项目,h5、web、小程序都有,胡言乱语几句总结

1、关于组件设计

因为是维护的老代码,引发了这个思考,比如这个上传功能的按钮,旧的遗留代码是这个按钮,以及上传功能(包括各种渠道:不同地区,不同端的业务逻辑)以及上传后的结果展示,都放在一个vue组件里面,然后代码一千多行(代码我就不展示了,商用代码),我看到这代码的时候我内心是比较崩溃的,万一产品改了上传按钮的样式和位置,还有不同地方不同展示,那就悲剧了,事实我的担忧是没错的,马上就接到了改这个的需求,囧

我拿到这个需求后,进行了全新的设计,封装一个纯粹的上传库Uploader,上传按钮和上传结果展示这些UI层的东西不放入Uploader,对,方便产品随便折腾改,在Uploader里面设计好事件系统和一些api接口,甚至还有filter钩子系统,这样,就基本可以不加任何UI层的代码进Uploader,秀下代码吧,:)

/*
通用上传组件
Package: Uploader
Author: deng_   dclnet@qq.com
Date: 2019-03-08

=================================
ui层业务代码请不要随意放入此组件 !!!
=================================
-------------------------------------------------------
使用
1、初始化
var uploader = new Uploader(option);

var uploader = new Uploader({
  // 上传类型 详见 Uploader.uploadType
  uploadType: Uploader.uploadType.album,
  // 限制上传文件个数
  maxCount: 9,
  // 限制单个文件大小,单位字节
  fileMaxSize: 50000000,
  // 允许上传文件类型扩展名
  ext: ['jpg', 'png', 'gif', 'mp4'],
  // 额外请求头
  header: {},
  // 用来指定跨域的请求是否应该使用证书(如cookie或授权header头)
  withCredentials: true,
  // 允许同时并发上传文件个数
  maxSyncCount: 10,
  // 接口参数
  data: {
    path: 'path', // uploadType为album时不必传
    msgTitle: '小钻风一号',
    // msgCnt: string|function(函数必须同步返回字符串)
    // msgCnt 中可用以下变量,实际会被替换成具体值
    // {totalCount}      上传文件总数
    // {uploadedCount}   上传成功文件数
    // {failedCount}     上传失败文件数
    msgCnt: '在《XXXX》上传了{uploadedCount}张图'
  }
});
2、设置要上传的文件
uploader.setFiles(files);
或
uploader.setFilesFromBase64([
  {
    base64: "data:image/png;base64,yyyxxxzzz...",
    filename: "test.png"
  }
])
3、注册事件
uploader.on(eventName, eventHandler);

uploader.on('beforeUpload', function(data) {});
uploader.on('uploadedItem', function(data) {});
uploader.on('uploadComplete', function(data) {});
...
4、校验(文件个数、大小、文件类型)
var errors = uploader.validate();
5、上传
uploader.upload();

------------------------------------------------------
>上传类型
Uploader.uploadType = {
  album: 1,       // 普通相册(相片或视频)
  music: 2,       // 音乐目录
  document: 3,    // 文档目录
  avatar: 4       // 头像目录
}
------------------------------------------------------
>上传状态 见 Uploader.status 定义
------------------------------------------------------
>错误码 见 Uploader.errorCode 定义
------------------------------------------------------
>事件
filesQueued          添加文件队列后
afterValidate        校验后
beforeUpload         上传前
beginUpload          开始上传
beforeUploadItem     上传单个文件前
uploadItem           上传单个文件
progress             文件上传进度
uploadedItem         上传单个文件完毕(无论成功与否)
uploadComplete       所有上传完毕
------------------------------------------------------
>过滤钩子名
uploadUrl            过滤上传地址(使用上传地址时调用)
使用:
uploader.addFilter('钩子名', callback); // callback 必须同步返回

uploader.addFilter('uploadUrl', function(url) {
  return url;
})
------------------------------------------------------
>对象方法
reset                重置(校验结果,上传状态,统计等)
setFiles             设置上传文件
setFilesFromBase64   从Base64设置要上传的文件
getFiles             获取要上传的文件
on                   注册事件
off                  解绑事件
validate             校验
upload               上传
getStatus            获取上传状态
getTotalCount        获取上传文件数
getUploadedCount     获取上传成功文件数
getFailedCount       获取上传失败文件数
getUploadedFiles     获取上传成功的文件
getErrors            获取校验错误
setOption            修改设置option
setData              修改设置option.data接口参数
abort                终止全部XHRHttpRequest上传请求
addFilter            添加过滤钩子
removeFilter         移除过滤钩子
*/

以上是组件的使用说明,

这样初始化后直接给上传展示的UI类组件,

upload-widget进度与结果展示组件在需要的地方注册事件,这样不是很完美吗? 

多样式,不同位置的input上传按钮和上传进度,结果的展示与Uploader无关,这样需求随便改也不至于代码改动太大,甚至都不用改Uploader;

小结:一个小组件,甚至一个小按钮引发的一些功能,在封装组件的时候,尽量考虑下一些经常变的东西和一些不经常变的东西,这样或许更好。

2、代码规范

本来这个问题不想说的,一般有些编码经验的应该会懂,这也是从旧有的代码提出来,稍微说下,

代码格式规范就不多说了,比如,一些错误码,那种一大串数字字符串的错误码,渠道码,等等,建议是独立出来在一个文件里面定义好,代码里面不要直接写一串数字,那东西你自己过几天来看,能知道是啥意思?

这样定义一下不好吗?使用也方便,看的也一目了然,

还有一些小问题:

别在 if-else 判断里面直接写中文做对比吧,那个有编码不同导致隐患的啊。

配置参数,配置文件独立一个文件就很好了嘛,放在一个app的实例里面,不用考虑依赖死循环吗?在app没有实例化的地方引用呢?

最后: 不管是封装组件,还是写一个小小的函数,或者定义一个数据,多思考下放在哪里,怎么放,该分开还是组合一起放或许会为以后的工作减少不少工作量,又能更快更好完成任务哦~

以上暂时这么多了,胡乱写写,提醒自己,也给有缘看到的人提个醒。谢谢!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BS架构,即浏览器 - 服务器架构,主要思想是将应用程序中的逻辑部分与界面部分进行分离,从而达到更好的复用和可扩展性。在BS架构中,服务器端处理数据,客户端通过浏览器获取到处理好的数据,再展现给用户。 基于BS架构的系统设计源代码,首先需要考虑的是服务器端的搭建和数据处理。服务器端主要分为两个部分,一是接收请求,二是处理请求。在接收请求方面,我们可以使用Node.js作为后端开发语言,并利用Express框架进行路由管理。在数据处理方面,我们可以使用MySQL作为数据库进行数据存储和管理,同时还需要设计数据处理逻辑,例如用户的注册、登录、数据拉取等功能。 在客户端方面,我们需要考虑到用户交互和界面设计。在用户交互方面,我们可以利用Vue.js作为前端开发框架,通过响应式MVVM模式,与后端进行数据交互。在界面设计方面,我们需要根据系统需求,设计出符合用户体验的界面,例如闪屏页、注册页、登录页、数据展示页等。 此外,在整个系统的架构设计过程中,还需要考虑到安全性、可扩展性、可维护性等因素。例如,在安全性方面,我们需要进行用户身份验证并防止SQL注入攻击;在可扩展性和可维护性方面,我们需要进行代码模块化、合理规划路由、灵活选择云服务器等。 综上所述,基于BS架构的系统设计源代码需要综合考虑到后端逻辑、数据库设计和前端界面设计,以及安全性、可扩展性和可维护性等因素。在实现整个系统的过程中,需要遵循规范、灵活运用技术,才能打造出一个高效、稳定、安全的系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值