前端mv框架下(目前写的是vue),对组件抽象的思考
前沿:
抽象是门大学问。前端mv框架中,以组件化的概念为主。经常会考虑抽象到组件级别,进行复用。合理的抽象,能提高效率,减少业务逻辑视图的耦合程度。不合理的抽象,则会增加代码的复杂程度。
遇到的问题
合理的抽象是很难的,需要不断的思考,才能做到最合适的抽象。在b+项目中,遇到了一些问题。
1、有些组件,ui和逻辑都可复用。ui抽象了,对应逻辑没抽。这样在复用这个组件的适合,逻辑部分的代码没有复用到,得另外复制粘贴一份。
2、有些组件,ui可复用,逻辑不可复用。抽象成一个组件,ui是实现了复用,但是业务逻辑得配置参数使用,导致switch case 无限增多。
我所理解的抽象思维:
1、基础抽象,适用于所有的项目。
首先,从功能的纬度去抽象。抽象一些具有某一特定功能的ui组件。比如说,button,日期选择器,列表等,这些都是具有特定功能的模块,单独可抽象为一个组件模块。这种抽象的最终结果就是最终能抽象出一整套ui库。例如elemntui,antd等。这一层是
2、业务模块的抽象,根据业务逻辑判断。
在具体项目中,除了从功能模块先抽象最基本的一层。还可以从业务逻辑的纬度去进行一层业务模块的抽象。判断可抽象的依据是,ui具有一致性且业务逻辑也一致性(主要判断条件)。一个的反面例子,假如有三个模块,每个模块的列表都是长得差不多,但是三个模块的业务逻辑是不一致的,比如说接口调的不一样。这种情况下,虽然ui很像,但是逻辑不一样,就不合适抽象组件进行复用。一个正面例子,假如有一个多个下注按钮,ui稍有不同,但是实现的逻辑都是下注。那么就适合做抽象。
总结:
功能性逻辑情况有限,所有是可配置并可抽象的。业务型逻辑的情况可能无限,不合适去做配置实现抽象。所以,在业务中能抽象的必要条件是,业务逻辑必须具有一致性。如果ui也一致,则可抽象成组件。如果ui不一致,则单独抽象逻辑部分(这vue中可用minxins引入公共逻辑)。
前端mv框架下(目前写的是vue),对组件抽象的思考的更多相关文章
- 前端MV*框架的意义
经常有人质疑,在前端搞MV*有什么意义?也有人提出这样的疑问:以AngularJS,Knockout,BackBone为代表的MV*框架,它跟jQuery这样的框架有什么区别?我jQuery用得好好的 ...
- 前端 MV*框架的意义
早期前端都是比较简单,基本以页面为工作单元,内容以浏览型为主,也偶尔有简单的表单操作,基本不太需要框架. 随着 AJAX 的出现,Web2.0的兴起,人们可以在页面上可以做比较复杂的事情了,然后前端框 ...
- vue mint-ui 框架下拉刷新上拉加载组件的使用
安装 npm i mint-ui -S 然后在main.js中引入 import MintUI from 'mint-ui' import 'mint-ui/lib/style.css' Vue.us ...
- 前端MVVM框架设计及实现(一)
最近抽出点时间想弄个dom模块化的模板引擎,不过现在这种都是MVVM自带的,索性就想自己造轮子写一个简单的MVVM框架了 借鉴的自然还是从正美的avalon开始了,我记得还是去年6月写过一个系列的av ...
- js架构设计模式——前端MVVM框架设计及实现(一)
前端MVVM框架设计及实现(一) 最近抽出点时间想弄个dom模块化的模板引擎,不过现在这种都是MVVM自带的,索性就想自己造轮子写一个简单的MVVM框架了 借鉴的自然还是从正美的avalon开始了,我 ...
- 前端MVVM框架设计及实现
最近抽出点时间想弄个dom模块化的模板引擎,不过现在这种都是MVVM自带的,索性就想自己造轮子写一个简单的MVVM框架了 借鉴的自然还是从正美的Avalon开始了,我2013年写过一个关于MVC MV ...
- 前端Js框架汇总
概述: 有些日子没有正襟危坐写博客了,互联网飞速发展的时代,技术更新迭代的速度也在加快.看着Java.Js.Swift在各领域心花路放,也是煞是羡慕.寻了寻.net的消息,也是振奋人心,.net co ...
- 前端UI框架和JS类库
一.前端框架库: 1.Zepto.js 地址:http://www.css88.com/doc/zeptojs/ 描述:Zepto是一个轻量级的针对现代高级浏览器的JavaScript库, 它与jqu ...
- 前端MVVM框架设计及实现(二)
在前端MVVM框架设计及实现(一)中有一个博友提出一个看法: “html中使用mvvm徒增开发成本” 我想这位朋友要表达的意思应该是HTML定义了大量的语法标记,HTML中放入了太多的逻辑,从而增加了 ...
随机推荐
- Android初级教程获取手机系统联系人信息
在手机内部,对联系人信息存在对应的数据库.我们创建的而联系人信息都存在这张表中.如下是对数据库的截图,我已经对表和应该注意的地方做了红笔标注: 好了,现在可以根据数据库里面的数据来写代码了. 代码如下 ...
- Swift基础之Swift调用OC语言文件使用步骤
Swift语言中,有很多封装类并没有,如果需要使用到,就需要桥接OC语言中的类,这时候就需要使用桥接头文件,一下是使用的步骤: 创建一个Swift项目Demo,然后新建一个OC语言的文件 如图: 创建 ...
- Ajax及jQuery学习
AJAX(Asynchronous JavaScript and XML),异步的javaScript与XML AJax中一个重要的对象是XMLHttpRequest. function ajaxSu ...
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(十八)
在游戏中制作手臂瞄准线,也就是所谓的辅助延长线.玩台球游戏的童鞋应该可以了解. 按道理来说,延长线是一个物理实体,遇到物理刚体应该会发生反弹行为,这个符合实际游戏逻辑. 但是这里为了简单,只是做一条& ...
- Mybatis接口编程原理分析(三)
前面两篇博客Mybatis接口编程原理分析(一)和Mybatis接口编程原理分析(二)我们介绍了MapperProxyFactory.MapperProxy和MapperMethod的操作及源码分析, ...
- 浅谈OC内存管理
一.基本原理 (一)为什么要进行内存管理. 由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空 ...
- 修改DrawerLayout 和toolbar 配合navigation的颜色
大家都知道DrawerLayout 和toolbar 结合能出来高大上的效果. 使用到一个ActionBarDrawerToggle类. 那么怎么修改DrawerToggle的颜色呢,搜索了很多中文网 ...
- Android Studio环境下搭建ReactNative
1.安装Android Studio首先肯定是 安装Android Studio(包含SDK)(国内推荐)ps:这里有一点要注意,需要为SDK配置环境变量,名称必须为ANDROID_HOME 2.安装 ...
- Dynamics CRM2011中通过JS脚本方式显示和隐藏ribbon中的自定义按钮
首先该方法不能写在页面的onload中,因为当从子网格返回常规表单的时候ribbon区域会重新加载而常规表单所在的iframe区域是不会被刷新的,所以如果写在onload中的话就控制的不那么完全了,我 ...
- RubyGem默认源安装太慢,修改国内淘宝源
原帖地址:http://www.hiceon.com/topic/Ruby-Gem-install-source-taobao/ WHY? 由于国内网络原因(你懂的),导致 rubygems.org ...