目前已掌握

# 软件服务行业开发趋势分析 Author:WangJun 个人见解 内部资料 对外不可见 [TOC] ## 1 用户办公模式的改变 ### 1 CS模式 在推崇"办公电子化",最早出现的是客户端/服务器模式 缺点: 1.linux,window,ios必须独立开发功能,除了软件安装包还需要额外的依赖文件和环境,如net.framework,VisualC++即无法"屏蔽底层差异性"; 2.更新麻烦需要C,S两个更新,破坏用户本地环境,"体验性差"; 3.且用户不更新客户端无法使用功能,一般服务端不会做向下兼容; 优点: 安全性和技术保密性高 ### 2 BS模式 浏览器/服务器模式的转化 优点: 1.页面可以屏蔽底层差异性,任何设备只要有浏览器即可,底层差异性由第三方浏览器解决 2.用户无序更新,只需刷新即可享受新的服务,用户体验好 3.用tomcat可以服务器的差异性,一套代码多服务器运行,还可结合"负载均衡"减轻服务器压力 4.可支持"单点登录"技术与站内,站外资源简化快速访问 5.用户体验更丰富:图标,报表,富文本,流程,下载,视频,消息,在线聊天,地图,定位,邮件 6."前后端分离"技术将数据的抽取和展示分为2步,降低依赖和耦合,如果有预留接口甚至可以实现"热更新" 缺点: 1.虽然底层差异性被简化,但需要处理浏览器兼容性问题 2.写浏览器兼容性的代码一般需要if-else或try-catch, 且有3种常见处理方式:低配就告知不支持模式,低配另一套方案模式,一套高兼容但降低用户体验的方式 3.前后端分离会带来被抽取数据及接口安全性的问题 ### 3 APP模式 在BS流行不久,随着手机性能变强和屏幕变大,"移动办公"成为一种新的流行模式,最开始被懒人接受,后来随着开发功力的加强,越来越多的事情可以在手机上处理,注意这里永远不是万能的,也不是万能的,未来500年内不可能成为电脑的替代(微型技术的限制),之前还有安卓apk开发热潮 优点: 1.安全性高,仪式感强,产品意识强 2.作为产品可接入其他产品的小程序拓展,做丰富的大集成 3.可私人订制特定功能的产品,卖点明确 缺点: 1.苹果和安卓的客户端必须开发2套(现在似乎有解决方案,但依旧要调试页面兼容性),包括页面UI都要调整 2.需要用户更新客户端,用户体验差,特别是苹果应用更新,需要审核 3.用户会体验2套东西,所以必须有2组开发和测试,苹果开发访问资源权限十分严格,并且限制应用的很多自由会导致2个平台体验功能不同 ### 4 小程序模式 最初已经做的很成功的BAT等大佬,允许其他小平台可通过小程序的方式来“寄生”到自己产品身上,而且其拥有丰富的用户群体,就支持一次身份认证绑定,之后只要app登录状态正常,小程序就免登录。小程序的模式对大平台来说是与其他几乎市面上所有应用集成最快方式。例如微信想订餐、寄快递、购物,只用使用对应的饿了么、菜鸟裹裹、淘宝即可。用户理论上包括和体验上本机没有安装对应的app,就可以使用(因为他们并不会关注微信的内存变大,是大容量手机的功劳)更多说明参照,“新互联网时代谁是平台的解说”。 优点: 1 作为4种模式中最简洁的用户使用模式,用户可以最快得到轻服务 2 作为公司产品,能集成主流应用也算是卖点 3 轻服务更新简单,毕竟使用MVVC模式和Restful思想 缺点: 1 虽然现在大平台几乎是免费并处于欢迎模式的支持各种小程序模式,但推测后期会出现提成收费的模式,参看苹果商城 2 用户得到的往往是轻服务,想使用全面的服务还是要下载对应的app 3 特别注意,只是轻服务简单,更多完善的服务难度会提升,不推荐将业务模式的主力放到小程序开发上 最近因疫情地图和某大神小-游了解的这个[uniapp](https://uniapp.dcloud.io/),一套代码编到8个平台,这不是梦想 Android版 iOS版 H5版 微信小程序版 支付宝小程序版 百度小程序版 QQ小程序版 字节跳动小程序版 ## 6 如何优秀的管理项目 假设有个项目,从上到下人都不靠谱,做事不明白,不干练,没有担当,那么就改变这一切 ### 需求调研 如果是项目的需求,必须和最有发言权的开发代表彻夜促膝长谈,差旅辛苦是必然的,也是活该的,因为那是你岗位的性质,也是岗位的基础职责。带回来的需求,最后有录音笔,先是从Excel上的层次结构先,先自己理解清楚,业务间关联,可能不稳定的逻辑,最好头脑好的去,或者派懂社交和和懂技术的一起去相互弥补。 ### 原型设计 原型设计者必须理解我司现有已有的,全部可能的平台和技术手段,原型甚至可以不用页面对齐,美观,但页面具体到每个查询条件名称类型,列表展示字段名称类型,编辑页名称类型校验特性。因为这些名称和类型为成为数据库设计和jsp,java代码中最终被采用的名称。也是怼测试的类似:个人觉得这个名称不好的最有效武器。 字段类型,选择控件,控件模式,还有必须建立需求明确度,最高是5,一般表示需求很明确且有旧的的例子,最低是0,类似用户章口就来的几个中文概念,这种属于最模糊。但一定要注意需求明确度为0时,开发自由发挥的问题,因需求岗没深度挖掘而导致的明确度低,责任由需求岗承担,另一种是需求度低本身就是只要有这个功能就行,例如新闻公告,采用一般模版就可完成需求。 ### 项目开发 有了原型,开发其实事半功倍,但只需注意一点,现在的开发都是利己的自私的,没有全局观念,这点除了项目经理进行协调部分外,彼此的协调还应在代码层,A做教研室,就只考虑自己的功能,B课程实体需要拉教研室,C做教研统计分析,结果A只管自己,逻辑删除,不限制,导致BC出问题。 这就属于做事情没全局意识,只考虑自己,只考虑自己的业务,不考虑业务被别人调用。所以WJ往往不怎么信任别人的接口,try-catch提防着,或者喜欢做耦合度低的独立板块。 由上面例子可以看出,项目经理需要一开始知道项目板块的切割,以及那些是耦合度高,耦合度低的板块,分别交个擅长,适合,有经验,有先例,靠谱的开发。一般不靠谱的开发尽量丢给其耦合度低的独立板块抱着项目质量,同时在计算工作量时,耦合度高,复杂度度,技术难度度,板块数多,核心非基础板块的开发应计算1.5以上的贡献度。必须理解事实:A做5个板块,B做3个板块,假设差不多的薪资下,A比B多出的N个模块就要面临[额外的开发,自测,改BUG,需求变更,接口联调] ### 项目测试 测试期必须本着A的Bug由A修复,尽量出现代理改Bug,特别A是核心板块负责时,因为其工作量本身就高,另外一点要杜绝,漏做校验联合等部分功能的人将部分开发期该做的事情放到测试期。测试仅在完全理解需求下可以不用沟通直接提BUG,有争议的尽量少群里提问。 测试提问时,最好明确的@某个指定开发,不要在大群无目标的@全员,测试应该有每个板块的开发负责人姓名。 测试发版时,禁止开发使用测试数据库开发,每次发版必须有发版人,版本号,更新内容,新的业务清库脚本,每个语句需要注释。 ### 项目上线 上线时必须有,发版人,版本号,更新内容,且每次更新需要先备份数据库,重启服务必须选择用户低峰期。非项目经理指定人禁止链接跳板机,数据库,每次使用必做说明。 ### 项目预研 可行性评估阶段:想要做个产品A,一开始不是立即找人做,而是评估是否可以做,方案是否可行,投入回报比符合预期;对市面已有产品A的评估,如果已有那么就先明确其已有的功能C1和我们想要的功能C2之间的交并集,评估后确定预研产品A的,期望功能列表。如果市面上没有同类产品A,那么需要先列出期望功能列表,然后评估可行性。这部分由发起者和产品经理一同完成。 预研规划阶段:决定预言产品名称,期望功能列表,预期实现技术手段,方案成功率,研究人员,研究工期,研究计划,自测和产品中检演示,结项演示,结项测试。 预研开发阶段:开发初期,难题攻克阶段,一有问题最好尽快上报,判定是否中断项目,开发中期,逻辑业务和我司特色实现阶段,配合中检演示,确定实际可实现的功能。 预研测试阶段:此阶段基本决定了,预言实际功能和计划功能的差异,安排BUG修复和最后一轮演示。 预言结项阶段:负责人和开发者签订责任证明,技术手册和持续技术支持证明,实际功能和计划功能的清单,编写API和用户手册,明确注明适用范围手册(若之后有新功能或改动功能本次预言不负责),公司范围内演示,并拒绝一切在演示中提出的功能变更。 预言实用阶段:成品代码+文档+手册,基本够了,原开发者必须提供技术支持(但不包括计划书以外的技术) 预言更新阶段:随着实践证明,收集了不少新功能可以追加,不好意思,请必须再次从可行性评估阶段开始,可简化部分步奏,但想法归想法,可行性评估不能由需求人员决定而是技术人员拍板。 ## 7 其他零散的课题 ### 开发在软服做的业务分类? 可以理解为,我们的开发通常开发的业务归类,最开始分析这个,主要为了个人方便干活,挑简单的 + 抽取数据2★ (公共级使用范围:只读Query,消息,公告,XX详情,统计,报表可视化,门户) 丰富多样,简单好开发,卖相好,可多投入,找前端多花样,讨好的是验收者,高层领导 + 写入数据 3★(个人用户使用范围:个人基本业务数据提交,结构化子表数据提交,流文件提交) ​ 业务种类繁多,需求变更的核心,不同人查看特效不同,开发量大且要仔细,讨好一般基层客户 + 大量写入数据 5★(维护者小管理员使用:初始数据维护,运行期批量操作) ​ 业务数量一般,一般只有懒惰的小管理员嫌累才会要求加的批功能,讨好的是客户中层依情况满足 + 处理事情3★ (高层领导使用:处理流程,回复邮件,批示一下,签个字,发布个什么,激活什么)页面操作几乎一键式 ​ 业务数量中等,往往只看重简洁易懂的页面,和傻瓜式一键操作,更重要的这类业务一般都要有 ​ "黑箱"、"可撤销操作","可隐蔽的撤销操作"、自己不干事的代理功能,讨好高层领导 + 基础概念表的增删改查3★(如科研组织机构,评分维度,评分项目,评分列表,教室维护,器材维护),使用人群小管 理员 综上:项目经理也可以知道在有限的时间里,如何有限分配人力资源,优先完成何种功能 ### 移动端办公的局限性? 从PC的浏览器走向Mobile的浏览器或App时,很多用户都觉得方便,但是,真正觉得方便的只有上述已提到的两类用户“一般公共用户”和“高层领导”,前者阅读信息方便,后者办事方便一键式,而一般基层用户和小管理员做并不觉得方便。 研究移动端页面布局可知,现在移动端的功能多数是“只读的”,“展示性质的”,和“简单处理一键操作”,市面上已有框架较少的复杂结构录入的模版 移动端的局限性来自屏幕的局限性,小屏手机和横屏模式(即更可怜的手机)请滚出互联网 你个破手机页面就那么大的空间,顶多拥有无线的垂直空间,如何将WEB端丰富的信息展示在手机上 方案1:精简和压缩和变化(熵递减) 例如选人控件减少无意义字段展示和冗余搜索条件(精简) 判定如果是手机端,那么字间距和行间距变小(压缩) 分页变简化,只要上一页下一页,或者微博模式无限加载(变化)变化有Java改造工作量 方案2:隐藏和折叠和滚动(熵不变) 不必要的字段用一些层去隐藏,滑动后该层内容出现 手机模式下某些功能是折叠起来的,如搜索框,点击出现可用 列表数据全显示,但需要水平滚动,本质是部分非响应式,进行自适应的 方案3:响应式布局 Web按照响应式布局规范开发代码,其在PC段是水平平铺Div块,在移动端就会变成垂直列出Div块 并会友好的自动计算出符合手机屏幕Div快的宽高和内部模组的间隙(前提:规范开发,单Div块中内容不密集) 那么即使用这些手段解决了,为什么WJ还歧视移动端办公呢? 因为“移动端办公”出现的本质就是懒人办公,快速处理简单工作,而非复杂的工作,抱有可以处理复杂工作幻想的人要么是不切实际的人,要么只是说说最后嫌处理负责工作不方便。注意手机的定位 举个极端的例子:A买了新手机好厉害各种炫耀,歧视PC党 PC党表示:你拿手机写个JavaWeb项目,剪辑个年会视频看看,写个研究生论文,硬件爱好者拿硬件锤死这些傻子 同理玩家庭主机游戏的人也会歧视手机游戏玩家 手机为什么处理复杂表单困难? 本质源于手机没有鼠标,提供的输入控件操作麻烦 1 输入一个文本时,屏幕先被大键盘占据后消失 2 输入一个日期,屏幕先被占据,依次滚动年月日时分秒,占据消失 3 输入一个下拉,屏幕先被占据,滚动选项,占据消失(所以手机一般把下拉做成线性单选匡,如问卷星) 4 输入一个附件,屏幕先被占据,出现文件选择(注意苹果系统因为安全性策略禁止代码随意读取文件信息) PC的双行信息,变成单行,垂直无限长,一个个这样操作会出现 很容易出现操作疲劳和厌恶感 更不用说批量操作的100%的响应超时的及差体验感 综上:手机端顶多是只抽取数据展示, 简单的业务数据提交和处理,复杂的事情不推荐也不建议用户使用 ### 新互联网时代谁是平台? 首先搞清楚谁是用户:用户定义为使用移动端(未来人数会变多,并成为主力,基本上是使用基础服务)和PC端(门槛高,专业型人才,使用和提供高端服务)的需要“电子化信息”服务的2类人群 这些用户享受服务所使用的硬件,就是基础平台硬件,而在此之上的操作系统(win,ios,android),服务商(微软商城,苹果商城,小米华为商城),资深App(支付宝,微信,百度),浏览器(Edge,IE,safari,chrome,火狐)到底谁才是平台。 微软在成为平台上很失败,其操作系统的开放性,注定了用户享受服务所需要的专业性更强,有的人连调出任务栏管理器都不会,只会使用360产品的一键加速。 还记得window时代的软件服务的安装并不是一键式,各种询问路径、配置中途暂停的界面虽然丰富了用户配置,但对于用户是不友好的,特别是现在小白式的用户时代。有了苹果商城的一键购买安装卸载App服务模式,各大服务商都想成为平台并以集成服务来成为巨头,于是在操作系统,浏览器(插件商城)和apk上分不到羹的时候,BAT站了出来,敞开胸怀想将自己的App做成新的集成平台,抢占应用商城的市场。 因此现在小程序模式就诞生了。 追加:现在游戏市场一样,大家也在抢占平台,做集成,网易,暴雪,育碧,索尼,任天堂;家庭主机,Stream(PC),掌机 ## 8 WJ目前已有技术和思想 ### JavaScript高级技术 完全读完《javascript高级程序设计(第四版)》Nicholas C.Zakas,且有个人手记,ECMAScript的标准,JS闭包,JS对象,面向对象编程的熟练使用,"浏览器兼容性检测技术"和"Js兼容性代码编程思想"也源于此书.此技术在新平台封装"通用便捷弹窗空间"开发,使新平台的BS转"响应式"的自由变化成为可能(Js过滤器封装,Js移动端检测,Js对象封装) ### 弹出层技术 目前使用免费开源前端组件layer,拓展前端工程师之路,任何框架,注意是任何只要支持jQuery,一般人都能简单快捷使用,弹出层,气泡提示,进度条,遮罩(防重复提交,弹中弹),因为前端Css的层数受Z-index值控制,可以弹出中再弹出,无限弹出,大大拓展了浏览器可用与用户交互的空间。例如手机主要在利用Y轴,Z轴方向,PC段主要是X和Y轴,而本次新平台将Z轴大大利用也是基于此技术 ### 浏览器怪癖检测 源于《javascript高级程序设计(第四版)》对浏览器怪癖检测中最核心的代码,准确识别浏览器内核和版本号,识别PC浏览器和移动端浏览器,是个人原创Js响应式的核心。在这里学习官方的Js对象和方法兼容性支持[链接](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript) ### SpringBoot开发 最新的快速Java和JavaWeb项目构建方法,在mvc,maven后又一个创举,简化:项目构建,依赖添加,打包jar,web部署,强大模块组件丰富,配好依赖和yml即可快速使用,轻量级,个人自学试运行的rod_help.jar和hz_home.jar已经成熟,目前还没集成dao层封装,但有登录拦截和单点登录的集成,让cmd运行jar的JavaWeb项目不是梦。以前写项目基础框架靠高级开发送,现在平台自己撸,简单又快捷 其项目特色:简单配置,模块热插拔 ### 前后端分离RestFul 小程序,app带动的前端主流的思想,“ajax”是核心干将,将“数据抽取”和“业务展示”分离,降低耦合性,可配合负载均衡使用,如果Java层写的好提前预留了接口,可实现只改前端的热更新,也被成为restFul思想 北京老平台和武汉新平台的最大区别之一,改思想保证前端永远不会报“用户可见的错误”,体验性好,甚至在断网下也可以使用,先加载页面框架,后去抽数据,解析成什么样子由页面Js定 充分发挥了用户浏览器的运算性能,大大减轻服务器的压力(理由参考Js前端校验的出现) ### JS全局配置中心,对象实例化 我前端有个JS对象配置,但你们不能动我的配置,但你们可以用我这个配置的副本拓展分化出新的东西,是JS的深度拷贝而不是指针拷贝,不JS浅拷贝对象中的函数句柄仍旧是同一个,不行,所以必须是js对象实例化,用new关键词,例如var configObj=new RodUtils().getUserConfig();不不,不用担心new关键词的兼容性,学过JS高级的都知道new关键词很早就在ECMAScript都已出现,是不少JS插件的核心(JQ,Echart,BootStrap),只是很多初级JS人不会用而已。 ### JS弹出选择控件 结合了layer,js对象,js实例,js封装,响应式布局,浏览器兼容性诊断,完成的,先var configObj=new RodUtils().getUserConfig();由Js配置母版,产生一个实例 修正部分configObj值后,RodUtils.UserPop(configObj);触发弹窗,用JS函数句柄传递自定义的回调函数,并预留很多可拓展,可自由升级且向下兼容的多个接口 ### 自定义SQL选择器功能 还在为做自定义弹出单选,多选控件而头疼,要写java,jsp和scc,现在不用了,在web菜单上配置你的抽取sql,一定要小写以及加上where 1=1,然后查询结果要as新name,配置默认宽高,查询显示字段中文名称,查询显示字段数据库名称,列表展示字段中文名称,列表数据库名称,就可以用模糊搜索形成一个弹出层了,拿走你控件的Code,用简单的JS弹出选择控件和回调函数去触发它吧,你会发现,做弹出选择器原来可以这么简单。 现在支持更多开放的拓展接口了,比如单选控件时支持返回完整的一行数据,用户的控件在使用时可以append的sql了,你可用用ID或Code调用空间,升级版的用法更通用了 ### 高兼容前端文件上传控件 自己的业务表要求传附件,真头疼,自己的Java要加附件上传,表单提交的type变成Muti模式,好烦,Jsp也要改造,还要自己建文件表实体,还和大家的上传风格不同,还被测试说部分浏览器不兼容。明明开发都知道文件其实只是一个字符串ID,凭借凭证去文件表取文件信息,就没人做一个公共的文件表,简单的弹出上传文件控件,高兼容性,低兼容的自动适配,只管把DB已存好文件IDS返回给我。就没有这种实力的开发吗。 有的当然有的,凭借着印象中老平台被开发遗忘的文件服务器和上传思想,加上高级JS的前端技术,文件上传控件应运而生,操作文件先弹出,和JS弹出层一样好用,记得写回调接受传回的值,单文件,多文件上传,文件类型,大小上传皆可用JS配置控制,完成后和普通选择器一样给出文件的文件IDS,什么,页面要展示上传的N个文件信息并可下载,没问题,这个JS工具包中也有,调用方法,自动Load当前文件列信息,附加下载,你什么也不用做,什么刚进页面也要已有文件列表展示,这个工具包中也有,调用方法,自动Load当前文件列信息,附加下载,你又是什么也不用做,什么后台要保存这些文件IDS,还要判断那些是更新的,那些是新增的,是的你仍旧什么也不用做,调用文件类的Service,附你的业务ID,它自动帮你识别帮你存 什么,这全家捅的操作也太贴心了,不,还有更贴心的,如果一个表单有多个文件域怎么办,比如要分开上传研究生期间相关获奖列表和本科生期间获奖列表,没关系,本控件率先提出了文件位File_Pos的概念,默认为1,依次增加,只靠单纯的业务ID识别已经落后了,JOJO 兼容性:没错完全交给控件了,为了稳定,单文件上传和多文件上传是2个页面,同时为了歧视ios的文件禁止访问详细信息包括篡改操作,专门开发了一款低版本也能兼容的低配版,低配版您不能像高配版自由编辑上传文件 拓展性:使用本控件目前免费赠送上传进度条功能,免费的如果是图片额外的弹出预览功能,后期还可能拓展如果是PDF自动在线预览,甚至Offic在线预览(这个要收费的)等 使用限制:都知道FromData是新时代Ajax的好朋友,是仅凭一个js对象就能伪造一个表单对象,甚至是MutilType的表单,所以本控件的使用上限就是FromData兼容性范围,放心,识别为FromData不兼容时,系统会layer提示用户换浏览器的,十分贴心,并不会嘲讽用户的浏览器很渣很低级,绝对不会 ### OFFICE文件导入导出控件 + Excel导出 目前WJ已有一套100%完美的私人JAVA控件,可以封装的更为精密,作为Java工具包。 另外WJ也开发了90%完美度的私人前端EasyUi当前页Dom导出控件,因为兼容性的问题,可以封装一下成为完美的工具包。 + Excel导入 WJ私人有一套95%完美的Java导入,统一身份认证用户导入时用过,还行,已封装 目前平台有一套似乎很比较好用的工具包,WJ未进行私人收入和封装 + Word导出 WJ私人有一套90%完美,以ftl为中间体为导出模版的插件,但如果要进行图片导出需要使用盗版的jar包 + Word导入 WJ私人有一套95%完美,以不篡改模版情况下的word简单数据识别并录入插件 ### 图标库选择控件 现在的前端已经不设计图标了,直接用JQ库的免费[FontAwesome](https://fontawesome.dashgame.com/)素材一个不影响样式的I标签即可搞定,DB存储名称即可,但存之前必须知道其名称,于是图标库选择器组件应运而生,看到好看的图标选一下就会记录。目前已经完成 ### 颜色选择控件 这些开发做的东西颜色单一,图标简洁,不会用颜色,支持,rgb,hex为等名称回调的颜色选择器应运而生,告诉用户这里可以指定颜色,点选颜色即可录入,就是这么简单。目前已经完成 ### 统计报表 用户自定义数据抽取并形成报表,想都别想,那些菜的连excel做统计图都不会的人,还妄图用数据库抽取数据做统计(我司能目前实现的只有定制,简单可用的自定义报表根本不可能,统计本来就是很专业的事情,请不要小看了学统计专业的人)。这里WJ只推荐靠谱的技术,用Restful风格抽数据,配合Echart丰富的统计图+图片数据导出已经够用了。 ### 引用模式和复制模式思想 现在的开发都是用引用模式,实例化的概念只会用到Java层,不会用到业务层,直到我接触工作流的部署概念,以及第一次尝试写出了实例化业务的复制模式的代码。案例需求是:评分问卷系统,专家做卷子并保留每个选项的实际勾选情况。 实体如下:题目实体表,题目-选项表,试卷实体表,试卷-题目表。 很多开发都会这样设计,为了要保存专家的答题详细记录,那么就要锁定已做的试卷,那么就要锁定内部题目,那么题目内部选择在被用过后就也要被锁定不可再度修改。那么就变成了,题库中的题目只能被一套卷子使用不能复用,不能删改。毕竟总有傻子会删你的题目,改你的选项,甚至关键核心部分。 好处是例如发现卷子A的题目B描述文字错误时,未来将要做这个卷子的人,还有已经过去做过卷子的人就会发现,特别是后者,已有事实发生了改变。如同穿越到过去改变未来,然后现在事物与记忆中的不同这种诡异体验。 正常情况下引用模式是没问题,但这种必须保证记录已发生事实的这种体验就需要引入复制模式,WJ个人思想。 卷子不是将指针给你,而是将word模版像打印机一样将自我复制,新建表和实体存储,用户在自己的纸上进行填写,记录保存在纸上,而将word中文字修复不会影响已做过卷子人的体验,这就是复制模式,保存历史已发生记录的模式。 而这个打印其实就类似与用母版去复制自我,去实例化自己一个子对象,但是是业务层面的,之前WJ实现的JS全局配置中心就是用的母版实例化的思想。 ### 热插拔组件思想 前端插件热插拔:如同丰富的JQ插件库一样,WJ也学会了JS全局变量和插件的写法,引入我的JS,按API在线文档调用,所有插件功能支持“热更新“且“向下兼容”,能方便将不少前端通用的东西组件化。如弹出选择器,文件上传,全局配置层,全局工具函数,平台前端过滤器。 JSP,FTL页面组件化:如平台外围框架就是组件,开发的每个页面实际上是其内部Ifream;工作流外部框架是个组件,第三方表单就是个只管提交方法的Ifream,当然WJ不喜欢这种不完全封装不独立的组件。 JAVA热插拔组件:有了SpringBoot的配置和打包技术,插件包可打为独立的jar,引入和不引入决定了是否可以享受其功能。例如:邮件服务,短信服务,文件服务器,文档服务器,流程服务。WJ还是喜欢研究第一种 特别注意:不少开发也喜欢写组件写工具包时,都但懒得写API和文档,仅自己会用,别人不会用,别人用也用不到精髓,久而久之技术和劳动成果被遗忘,但WJ则会捡破烂,盗用并改良封装,并放到自己的SVN插件库里,并编写说明文档。 WJ开发组件的几大原则:热插拔性,可拓展支持自定义,新版本向下兼容,预留接口,必写说明文档 ### 动态开关思想 和插件热插拔思想类似,系统已经运行了,如何在不重启的条件下,让平台的某系东西发生变化(例如移除流程权限公共模块的案例) 浏览器缓存开关:适用于用户自己的界面皮肤色,注意兼容性 localStorage sessionStorage cookie 全局JS对象动态开关:全局页面都会引用的JS对象,不是配置都写这里,被篡改了也无所谓且不是机密信息类的动态开关可写在这里,前端开发者的最爱。 数据库表存储动态开关:例如工作流的版本信息就是一张表,四行数据写入版本信息,支持sql篡改,项目不重启。 系统常量表动态开关:一般开发字典表也会开发常量表,调用配置也是调用常量表。 Java代码常量表:这个不算动态开关。 SpringCloudConfig云配置:需要搞配置服务器,麻烦。 ### HTML5网页视频播放 利用VideoJs的特性,逐步加载视频缓存,支持倍速播放所有可行的流媒体,使视频播放变的简单 ### OFFICE在线预览 office在线预览可以使用OpenOffice软件win,linux版本进行辅助,由于大文件转码速度问题,目前已经优化,可考虑使用夜间批量任务,另外小文件也可以使用微软的在线免费服务,必须有外网地址,以及必须考虑文件安全。 ### 文件服务器系统 看到上面的高兼容文件上传控件,自然可以理解管理本系统所有附件的,文件中心了,可以查看和管理平台所有的上传文件,检测文件实体是否还存在,一键处理没有主人认领的文件,后续会考虑加入文件来自那些业务的标识,或者不加,因为这样设计很蠢也没有意义,目前已经追加了对多种文件的在线预览,rar-office-txt-pdf-video-image ### 服务器磁盘管理系统 利用Java的文件类,屏蔽底层差异性,可对服务器从根目录开始的所有磁盘文件,文件夹进行CRUD操作,借助Ztree的分层加载做出了有UI的管理页面,可以下载,也可以打包下载 ### 在线MarkDown文档帮助系统 起初源于在github发现的md格式文件,比txt纯文本更丰富的标识和内容结构化,图片展示,比word更快的写入和打开速度,本地文档,快速发布为web的html文件,无格式异常,结合SpringBoot技术目前完成的,在线编辑MD帮助手册,支持在线书写和发布,并支持分享和在线预览,最特殊的其Web还是响应式布局rod_help.jar 现在的开发Doc项目文件、需求文件,发来发去,改来改去,之后不了了之,要么文件找不到,要么本地堆垃圾! 现在给用户的Doc文档只是交付,一个简单的在线Doc文档系统,搞点在线的操作说明不是很酷炫吗? 开发之间写个控件说明,Api接口,发版说明,就不能像Web一样发布在网络(内网)上,我点开网址就能看,你给我的TXT,DOC,PDF,邮件我都懒得打开! 开发不写控件功能说明,很多好技术如同老平台一样被遗忘在SVN上,我想留下公司内部的在线文档 之前文件版本是1.0,我改成2.0还要每个人都发一遍,就不能像编辑新闻一样,改一下大家网页一刷就看到新版! 可以的,MD在线文档系统可以的,一人书写大家观看,内容更新刷新生效,语法简单,5分钟包会,不会给直接你钱,放个图片生动描述,文档结构树锚链接跳转,放个A链网址推荐,放个代码块格式不乱语法高亮 ### JEECMS文档发布系统 做门户,在线发布,配个前端搞网站,JSSCEM可以实现,只要你会配置模版,只要你理解其标签语法,只要你会阉割对方原版功能,只要你有模版设计思想,你就可以轻松驾驭,快速搞定剩下工时,白嫖其视频播放富文本功能 长期不用,忘记语法标签,忘记模版思路不用怕,WJ文档库java工程师搜主题《JEECMS快速搭建网站》,一份从过去穿越时空来到未来的关怀奉上,看了你就会用 ### 友好的用户体验,匠人精神 用户体验是追求,自己都觉得差不方便的东西没资格拿给别人用,将心比心,用户体验要素 1 不要让用户在页面看到看不懂的计算机专业报错信息(RestFul或控制层try-catch或逻辑严谨) 2 引导式操作(title,hover,高亮),辅助式在线MD文档,或layer小帮助 3 Js层不报错(善用js的try-catch和对浏览器怪癖的捕捉) 4 浏览器兼容性开发思想(要么写第二套方案代码,要么降低体验减少基本功能,要么不支持但给出提示) 5 在页面加载慢时给出提示,或做动画吸引用户注意力(倒计时,进度条),减弱用户的烦躁 6 记录用户偏好,利用json式的配置,版本更新,换设备,偏好数据都会留下,对个人友好 ### 开发小技巧,会总结的人最可怕 个人常用和使用的总结 兴趣爱好如果不产生商业价值,那么它很难被其他人认同,特别是老一辈 目前前后端肉眼可见技术最强的是B站 + try-catch的JS代码和JAVA代码常用 + JSObj的封装和new Js的对象,进行实例模式用Js,成功案例:JS选择控件 + 尝试进行"复制模式"来对抗"引用模式"来保存数据,成功案例:评审意见表 + 开发中用部署和创建实例,来从母版得到一个相同的子实例,数据库对象,成功案例:试卷发布