当我搭一个前端框架的时候我在想些什么

193 阅读6分钟

1.前言

我本身是做Android的。iOS,uniapp,web都实践过一段时间,有点关于前端小小的经验。

示例框架是用uniapp写的。 也对最近一段时间使用uniapp开发的总结

本文讨论的东西不是针对某种具体语言进行详细讨论,少有具体的代码样例,大多是谈的个人感受

项目地址:uniapp-frame: uniapp开发框架 (gitee.com)

感谢 张鸿洋-玩Android提供的api

本案例实现了三个功能:登录,注册,首页列表。借此展示如下知识点:

  1. 语言基础
  2. 原生UI组件使用
  3. 布局
  4. 自定义UI组件
  5. 页面间通讯,跳转传值
  6. 本地缓存
  7. 网络请求封装

无论是Android,iOS,web 能够掌握上述知识的使用并有自己的理解运用到实际开发中,就能够应付日常的开发工作了。

开发工具使用 HBuilderX-高效极客技巧 (dcloud.io)

运行前需要导入uView(uni-app生态专用的UI框架)。 uView2.0重磅发布,利剑出鞘,一统江湖 - DCloud 插件市场

2.如何对项目代码分层,归类,组织的讨论

前端的开发工作可以简单理解为三步

  1. 取数据
  2. 处理逻辑
  3. 展示数据

软件开发 本质上就是处理数据。对于前端,开发流程就是从服务端获取数据,展示到前端。

开发一个页面可能会出现如下代码:

  1. 网络请求
  2. 本地缓存
  3. 数据展示到UI
  4. 页面间通讯,跳转传值
  5. 调用相机,相册,蓝牙等api
  6. 巴拉巴拉的各种逻辑

Android中开发一个页面的需要继承activity类,iOS需要viewcontroller,uniapp需要创建一个vue页面

实际工作中,我们不可能把上述代码都放在一个类中,现实角度肯定是可行的,所有代码放在一个类,能写也能运行,反正用户又不知道你代码是怎么写的,用户也不管,用户只需要上手直接用,没有异常,没有bug,用起来还不错就可以了。

但是对于程序员来说这TMD的纯纯的辣鸡代码。看一眼就脑瓜子疼,这就衍生出组织代码的需求,把代码分门别类,统一管理,方便程序员开发维护。

经过无数伟大先贤智慧与努力 诞生出MVC,MVP,MVVM等项目架构。

2.1用了MVC之后 我还是写了辣鸡代码

对于这些层出不穷的架构一直以来都没有什么理解,按照官方的案例,网上的文章教程 创建几个代表M层,V层,C层的类 就自以为搭建了一个不错的架构。

实际上开发一段时间之后,再次出现了代码臃肿的情况。是MVC不好么?是MVVM不好么?为什么写着写着代码就都跑到一个类里呢?

后来明白了 是我辣鸡。 只知道学点皮毛,以为创建各种名称不同的类,定义了一套分层规范以后就能写出良好的代码。

类名称是不是MVC不重要,心里有MVC才重要。

MVC实质上 是一种组织,归类,划分代码的思想。对于机器MVC没有意义,MVC是为程序员服务的,代码经过归类划分,使得程序员能够快速理解某一段代码的意义。

面向对象设计原则中有一条叫做:职责单一

职责单一就是如何划分代码的准则。把职责相同的代码归为一层。 但是一层并不代表只有一个类。

对于前端来说,V层天生就比M和C层代码要多。网络请求,数据缓存肯定是封装好的组件,代码量很小,前端复杂的数据逻辑处理也几乎很少。

大部分都工作都在V层, 前端的主要工作就是做展示,要和各种UI组件打交道。

上面提到过,一层并不代表只有一个类,当V层代码很多很重,那么就有必要再次对代码进行组织归类。不应该拘泥于特定的几个类进行开发。

之前错误僵硬的思想,当MVC的结构分层之后,不会根据现有情况变化,所以就会出现大量代码堆积在一个类文件中。

重要的事情说三遍,

MVC实质上是对职责不同的杂乱代码进行组织,归类!!!目的是尽可能的复用,解耦

MVC实质上是对职责不同的杂乱的代码进行组织,归类!!!目的是尽可能的复用,解耦

MVC实质上是对职责不同的杂乱的代码进行组织,归类!!!目的是尽可能的复用,解耦

俺觉得按照这个思路去理解项目架构,是不会跑偏的,不管MVABCD,只不过是变了个名字,换了一种归类方式,用了新的的技术。理解代码分层的本质,而不是为了分层而分层,面对项目结构不会懵,新的技术可以慢慢学。

3.案例分析

上面干燥的文字讲太多了,整点实际的案例分析。简单的登录流程 和首页列表

登录页面的逻辑:

  1. 账号密码登录
  2. UI登录表单,样式
  3. 非空判断
  4. 网络请求
  5. 登录成功后缓存账号信息,跳转到首页
  6. 下次进入从缓存中取出上次登录的账号密码 并回显到页面

为了处理上述逻辑除必要的login.vue之外,另需要login.js 和 wanAndroidApi.js

login.vue实现逻辑:1,3,6

login.js实现逻辑:2,5,6

WanAndroidApi.js实现逻辑:4

再次重申!!!上述逻辑完全可以 全部写在login.vue中。但是为了代码的可维护性,可读行,对代码进行划分,归类。

首页列表逻辑

  1. 网络请求数据
  2. 分页逻辑
  3. 上拉加载下一页
  4. 列表UI
  5. 点击跳转详情

为了处理上述逻辑除必要的index.vue之外,另需要index-list.js 和 wanAndroidApi.js

index-list.js 是vue组件实现除网络请求外的所有逻辑。

index.vue的实现非常简单,只需要引用组件即可。当一个页面元素,逻辑过多的时候,可以利用组件降低代码复杂度。

小结

wanAndroidApi.js 是网络请求的封装,对外暴露get,post方法,返回promise对象。

login.js(纯js文件) 和 index-list.js(vue组件) 是代码的两种思路。

当代码纯逻辑,不包含任何UI的情况 使用 js文件。

当代码既有逻辑又需要定义UI的情况 使用vue组件。

案例项目结构如下

Untitled.png

4.uniapp开发参考文章

uni-app官网 (dcloud.io)

Vue基础 - uni-app官网 (dcloud.io)

JavaScript 教程 - 网道 (wangdoc.com)

Flex 布局教程:语法篇 - 阮一峰的网络日志 (ruanyifeng.com)

uniapp 如何调用上一个页面的方法 - 掘金 (juejin.cn)

uni-app 页面间通讯方式介绍 - DCloud问答

生命周期 - uni-app官网 (dcloud.io)

慕课网—自定义组件

uView 2.0 - 全面兼容nvue的uni-app生态框架 - uni-app UI框架 (uviewui.com)