用mvc也是在前端,在js框架上用mvc,这样服务器完全变成json的数据获取api了,当然权限控制需要设置在服务器,但这个是很个简单的需求,如jsp中只要用session在头文件中判断一下是否有权限,一行程序就可以解决,根本不用犯病用mvc,引入spring这种严重影响性能的反射机制。
如果你在html和js中用mvc,又在服务器中用mvc,这完全是过度设计,需要考虑二个mvc,考虑n层的问题,根本没有必要,服务器的mvc会导致性能低下,如果大量使用spring的反射速度会非常慢,而且把问题变得非常复杂。
web开发框架不断变化,但最终回到了通信量最小化的模式,即同样的服务器下客户端和服务器传输量最小的模式,即为最好模式,也为最优模式。
一、最早的是cgi开发,也就是一个http请求一个html文件被程序拼接出来输出,这个方法是所有方法的基础,通信应答方式,但每次请求需要传输最大化重复数据。
二、后来出现了类似java的servlet,c#的httphandler这个在cgi开发上的包装,主要可以处理session,get,post,request,response各种情况,通过get参数,post参数来获取动态内容,对服务器程序有一定复用。
三、再后来发现通过http处理框架,不能热布署,需要重启才能有效。这时发展出来了php,asp,aspdotnet,jsp这种热加载框架,工作原理就像定时器一样把这些网页翻译成类似cgi来工作。
四、人们总是不断追求,发现php,jsp,就是代码和html混杂在一起,如是发展出了以javamvc为代表的分离绑定,出现了struts,spring,.netmvc,phpzendmvc这种框架。
五、mvc出现后,发现开发一个界面需要改m,v,c三个部分,html视图出现支离破碎的情况,可能一部分html代码出现在m层,一部分html代码出现在v层,一部分html代码出现在c层,不方便美工分工合作,也不方便用于内容与视图的分离,于是又出现了模板开发,模板可能存在于数据库中动态生成内容,Velocity/NVelocity,FreeMarker,Thymeleaf,Razor等等。
五、模板开发号称简化了开发结果很多主流编辑器都不支持,很多有性能有问题,很多web应用需要无刷新需求,如gmail,来一个邮件可以显示出来,而不是需要用户不断刷新页面才能显示,不断的页面转跳影响用户体验,以jquery为代表ajax前端框架出现,直接从服务器获取json数据,动态绑定到html内容上。
六、大型web应用用面向过程的事件驱动开发会程序可能会像一根面条一样,动一根而动全身,加上各大浏览器竞争,在解析javascript性能得到很大的提升,html5和移动互联网的发展让web开发更加复杂,这时出现了前端使用mvc框架,把服务器当做通信api,用js获取json动态绑定到mvc的模板上。由于js都是在前端运行,多是开源的,出现了很多js框架,如Angular,Ember,Vue,React等,同时出现了大量的jsui库,如jqueryui,extjs,bootstrap等。在后端出现了微服务,webapi,websokect这种通信框架也需要js配对。在js上各种框架层出不穷,程序的业务功能不断向前端实现。
人们很多时候还是排列组合使用这些开发模式,但过去的很多框架受技术限制,只能委屈求全,折中出各种模式,通信量最小化无疑是一种最优选择,服务器端mvc性能差,向前端mvc发展是必然,在ajax+jsmvc出现后,服务器理论上实现了通信量最小化(不考虑数据压缩的同等情况下),可实现更高并发,服务器也就变成了获取json的api,根本不需要在服务器上实现mvc,未来web程序的主要焦点在前端程序上。M变成了json,C变成了js,V变成了html,app,实现了真正意义上的分离设计。
这种设计抽象好api完全可以复用于移动互联网的app,有了很好的软件复用效果,节约开发成本,是必然发展趋势。