wES-demo简介

概述


一个Spring-boot + Vue.js的web应用,用于展示一些通用的ElasticSearch使用场景. 这是一个相对比较激进的项目,使用了很多当下最流行的前后端技术.
前端:
ES6/Typescript+WebPack+EsLint+vuejs2+vue-router 2+axios+element-ui
后端:
Spring-boot+ElasticSearch+MySql+Spark

优势


语法糖 -- 更易读的代码,更安全的代码

  • ES2015/TypeScript:异步编程promise,类结构,变量作用域,模块化,函数默认参数,
    箭头函数与this,字符串模板,静态类型检查(TS)
  • Less:嵌套,变量,方法

工程化构建 -- 让机器帮你优化代码

  • 多源构建:支持多种代(ES2015/TS/Less)码编写,忽略编译/预处理过程
  • 错误检查:使用EsLint等工具检查低级语法错误,让程序猿集中精力处理业务逻辑
  • 代码风格统一:自动格式化代码,保证团队代码风格统一,提高可读性和可维护性
  • 自动性能优化:让工具帮你打包,合并文件,优化图片,处理模块加载
  • 热加载:自动编译代码,并刷新浏览器,保护你的F5键!
  • IDE支持:让js也能自动完成代码提示,并且更准确. 更方便地阅读和重构代码

规范化编写 -- 限制你的程序猿天马行空的coding

  • 框架结构清晰,层次分明:
    • 使用Vue.js把代码进行分类编写(data,props,computed,methods)
    • 使用vue文件编写组件,一个文件就是一个组件,代码在物理上进行隔离
    • 使用js模块编写代码,保证命名和变量作用域冲突问题,并保证代码复用性
    • 正统的js class编写风格,远离prototype的恶心写法
  • EsLint检查代码风格:
    • 代码样式统一
    • 自动格式化代码
    • 自动检查低级语法错误

前后端分离

  • 加速原型界面开发:前后端并行开发,缩短开发周期
  • 降低耦合度,简化逻辑:
    • 封装常用业务组件
    • 模块化代码,提高代码重用
    • MVVM思想:UI模版绑定与业务逻辑处理数据分离
  • 更容易的单元测试: action与UI代码分离,方便单元测试
  • 为后端微服务化打下基础:前端完全从后端获取JSON数据进行界面展示逻辑处理,后端专注业务逻辑,接收和返回数据都只是JSON,简化后端与前端的耦合度

快速构建部署

  • 前端: 与后端完全分离,使用webpack等构建工具打包生成静态Html,js,css文件.直接在Nginx中同步静态文件
  • 后端: 使用Spring-boot单jar应用,节省war构建和tomcat等web容器构建, 直接java -jar xx.jar在Docker容器中运行
  • 自动化构建脚本: 使用nodejs自动化部署脚本执行发布更新任务,减少人工操作,避免人工低级运维错误,并且任何人都能操作发布更新系统
  • 服务器配置统一管理: 方便运维人员动态分配服务器资源,也使程序员发布更新时不需要接触敏感服务器密码

一次学习,多端应用

  • 基础UI组件迁移成本低: 开发人员可以根据实际需要快速切换到其他UI组件
  • 方便支持多端App混合应用: vue.js与weex完全类似,学习后迁移应用支持weex非常方便快速

框架/类库选择 - 前端部分


MVVM: Avalon vs Vue.js

  • MVVM:相比JQuery可以大幅减轻前端开发人员的思维分裂,可以分别专注布局和业务逻辑,而且复杂界面的实现确实比JQuery的实现简单易读. 整体学习成本也较低,只需要半天左右就能上手实操.只是需要注意开发思路与JQuery较大,思维方式转变才是学习关键.

  • Avalon之前一直在项目中实际用,包含了v1.4, v1.5, v1.6, v2.x各个版本,学习和使用过程中一直都是各种惊喜和折磨交织着.

    • UI部分,开源貌似只有一个可用的UI库Oni UI, 这个UI库组件确实比较齐全,但是默认样式实在太丑,对于我们这种没有美工的小团队来说就是一悲剧,所以最终放弃了,使用metronic和 adminLte+freemarker自己封装业务组件,结果因为团队开发人员的素质参差不齐,导致各种各样的组件出现,各种难以维护,费时费力.
    • 代码风格较为灵活,怎么写都可以,而且可以随意增加model字段,所以导致面条式的代码出现,组件复用和重构难度增大,而且可读性较差;v2.x虽然也开始支持组件,但是版本差异太大,从v1.6迁移成本太高,而且各种诡异bug.
    • 开源社区较为"冷淡". Avalon虽然是去哪网主推,一直也在频繁更新,而且也有各种社区网站和论坛. 但是总感觉是一个人在开发,更新发布相对较为随意,版本间兼容性也较差.而且现在的社区都是些新手在问一些基本问题,很难见到高手写的blog文章或者开源项目.
  • Vue.js是最近才开始使用,之前都是听各种演讲时听到,而且时常在微博刷屏中被提及,感觉作者是学营销出生,确实比较懂得营销自己,一直也没重视.这次是实在被Avalon2折磨的够呛,想换个组件库时看到awesome-vue中的UI组件库部分,彻底被吸引了,决定在新项目中尝试使用,结果近距离接触后才发现不是简单的Avalon like的MVVM框架,而是一个有着新思想新想法,并不断进步的集合,最最重要的就是整个生态非常健全,配套的工具也很多,社区非常活跃,大量相关的开源项目可以借鉴学习.

组件化: React vs Angular vs Vue.js vs Avalon vs 后端freemarker组件

组件化的重要性就不再重复说明了,这个对于企业级应用真的很重要! 我们在组件化的道路上也尝试了很多方案:

  • React: facebook出品,质量有保障,社区也相当活跃,而且React Native也是期望着能一统web和app开发,但是学习成本实在太高,只有资深前端程序员才能掌握,虽然整体设计非常优秀,但是本土程序员水平就摆在那里,再NB的东西也要有人会用才好.
  • Angular: Google出品,整体设计及社区支持都是没有问题的,还支持了个人比较看好的Typescript,所以还是比较看好的,但她的语法实在是有点怪,各种不适应,再加上版本更新太过频繁,担心后期跟进成本太高. 学习Dart时留下的阴影还没消散,总是担心哪天就被cancel了.
  • Avalon: v2开始支持组件,实现的也比较全面, 但是感觉还是不是那么成熟, 相关例子太少, 社区支持也少,而且支持的实现方式太多,感觉有点混乱. 项目从v1.6迁移到v2时也遇到各种诡异的bug,试了好几个版本,坑太多实在是无心继续尝试. 最主要的原因还是支持方式太多,代码怎么写都好, 如果团队内部没有严格统一规范,那么很容易写出各种各样风格的代码,这对于低素质小团队来说就是噩梦.
  • Vue.js: 第三方开源组件库实在是太多了,而且都很快更新到vue2了,社区相当给力.一开始使用的muse-ui组件,后来发现这个库的bug太多,就切换到element,结果只花了半天不到时间,全程bug很少.同时,vue.js把很多常用的细节设计得非常规范,大家都按照规范编写出来的代码很容易阅读和重构.
  • 后端Freemarker组件编写: 这是之前项目一直使用的方式,也比较直观易懂,但是就是太依赖公用库开发人员的素质,只有资深的程序员才能编写重用程度较高的组件,初级程序员编写的就是各种噩梦. 而且自己封装UI组件实在是非常原始的工作,需要团队花大量时间打磨细节.在目前这种飞速变化的时代实在是件低效率,低成本的事情.

前端工程化

  • Grunt: 目前因为性能问题已经被社区嫌弃
  • Gulp: 非常好的设计思想和性能表现, 社区非常活跃,相关的插件最丰富. 可以非常方便地完成一些简单的代码转化,并且与webpack集成良好.
  • Npm script: 过于底层,开发工作量较大, 目前只作为脚本程序统一入口
  • Webpack: 模块化所有静态资源(js, ts, css, less, vue)加载,并集成本地开发服务器,自动编译代码并刷新浏览器
  • Bower: 暂时没有发现亮点功能,暂不使用.

ES2015 vs TypeScript

  • ES4: 恶心的语法+各种变态"仿真"实现+各种诡异Bug=程序猿的噩梦
  • ES2015: 增加了各种语法糖,代码好看太多,而且还有babel转化器实现,可以安心使用ES2015甚至是ES2016了,兼容各种浏览器和IDE
  • TypeScript: 静态类型+支持混合js编写(DefinitelyTyped)+大量语法糖+活跃的社区支持+VS code IDE支持. 确实很不错, 但是还有待观察和试验;

IDE支持

  • Github Atom: 非常不错的IDE,但是感觉实在是有点混乱,任何小功能都需要找插件完成,再加上国内蛋疼的访问速度
  • VS Code: 微软的底蕴确实不错,设计优秀,更新频繁,并且整合了很多ts相关的功能,灰常好用,社区支持也比较给力,Atom的插件差不多都有VS code版本的.
  • IntelliJ: 灰常给力的java IDE,更新速度和社区支持也是杠杠的. 就是太重量级了,启动慢,编译慢(Gradle的问题). 所以一般只是在开发后端时使用. 前端nodejs和web相关部分有待尝试.
  • Eclipse: Eclipse这几年开始各种"不务正业"的折腾,以前很多好用的功能变得难用,再加上糟糕的插件更新方式.

框架/类库选择 - 后端部分


环境搭建


前端部分

  1. 安装nodejs, 去官网下载v7.x版本NodeJs,并安装;
  2. 在命令行下安装cnpm:
npm install -g cnpm --registry=https://registry.npm.taobao.org
  1. 进入web目录,安装相关全局工具和相关依赖:
cd web
cnpm install -g vue-cli webpack eslint gulp 
cnpm install
  1. 运行dev开发模式
npm run dev
  1. 运行lint检查代码文件(注:dev模式自动检查,build是也检查,lint一般只是快速检查时使用)
npm run lint
  1. 运行build工具编译生成静态文件(发布时使用)
npm run build
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • UI组件element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于...
    董董董董董董董董董大笨蛋阅读 8,499评论 6 123
  • 他,名叫张小凡,人如其名,是一个普普通通的上班族,二线城市,早九晚五,工资刚够他自己生活,工作很轻松。这个城市今年...
    勤奋虎哥阅读 496评论 0 1
  • 放学铃已响过很久了,韦蓝仍在座位上一动不动,她拿着笔,似乎是在聚精会神地演算习题。直至整个教室空无一人,韦蓝才收拾...
    夏季的风a阅读 482评论 0 1
  • 人生,不在于活了多长时间,而在于记住了多少时间呀! 课上,我们都在埋头写作业,一位女老师在挨个翻同学的头发,是为了...
    藤木同学阅读 480评论 0 0