博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C/S向B/S转变
阅读量:7173 次
发布时间:2019-06-29

本文共 2159 字,大约阅读时间需要 7 分钟。

  hot3.png

 

     软件技术的转变常常是解决了某些痛点,本文来聊聊C/S架构的应用向B/S架构转变时相关的痛点。

    其实这儿痛点很多,界面是其中之一。

    C/S程序是网络通讯时代来临后,数据多机分发时,客户端程序界面依赖操作系统的图形API进行开发。C/S架构的客户端程序界面往往是用控件组成的界面,若干控件拼在一起,就像活字印刷是由一个一个的铅字块拼成一整页印刷面。

    这里的痛点是界面和控制代码耦合在一起,同时不同控件的显示形式相互分离,若要改变界面的整体风格,那要将相关的所有控件都修改一遍。

    转换为B/S架构后,客户端程序运行于浏览器这样的容器中。浏览器的实现给出了层叠样式表(CSS)的规范接口,同时控制交给解释型脚本语言Javascript()等,这样界面迎来了新纪元:用若干个“层”重叠后形成最后的界面渲染。这个理念和PS的图层概念相类似,先进的理念往往会在多个地方开花结果。早期幻灯机的幻灯片是一张一张被写了字的薄膜叠放在灯光下,反射在屏幕上呈现叠加后的结果,而Javascript负责躲在叠加后的层下面进行业务控制。

    以后若在操作系统级别也采用类似的理念,比如GNOME支持CSS规范,同时也支持某种解释型语言(最好别再选择Javascript这种弱数据类型脚本语言的),整个程序可以用HTML来描述,操作系统的桌面本身是个浏览器容器,也就是说浏览器下沉到操作系统里了。如此,一次编写好的程序,或许就可以在各种异构的操作系统上运行,只要各个操作系统遵循相同的规范。

    插个话题,谷歌的Chrome浏览器的内核的API成就了NodeJS,这应该是一个不错的预示,使浏览器沉入操作系统被预示为某种可能。从这个角度来说,国内那些浏览器厂商,开发的浏览器都只是个皮毛。拿人家的源代码过来改改,除了劫持用户信息和添加发放广告的模块等等之外,更实际的事情都做不来。至少我是没看到国内浏览器厂商哪家能将自己的浏览器的所有API都能梳理出来,然后搞一个NodeJS这样的东东出来。

 

   当前MVC架构理念做软件的尽人皆知,其实当这 MVC中的V,也就是View被超然独立出来以后,这View本身就是一篇值得做的文章,特别是CSS规范不断发展并深入人心同时网络应用越来越被广泛需求的时候,构建View也就成了软件工程中重要的一环,它也有自己框架,常常被称为MVVM。

    

 

 

MVC:

 

    图片

 

 

当View渐渐要宣布独立之后,常常演变为:

图片

成这个样子之后,View就可以跟下面两个兄弟相隔一个网络的距离,甚至有些单机程序,为了一些避不开的好处,它会假装一下自己也有网络,在单机的环境里虚拟一个网络出来迎合MVC的需要。

 

    当View被彻底重视之后,它自己本身又演化成这个样子:

 

图片

    

    基于上面的描述,我给出的全栈建议是这样的:

 

  1. MVC的M和C,当前大多是用Java来写。我认为,除了Java的出生好,它是继承着C和C++踩过的坑而来。在我们国家的这正是各大高校的古典派计算机教授们的修炼路线,因而底蕴深厚。撇去这个不说,我认为Java用来写服务端程序,很得益于Spring这样的IoC框架,这个框架将面向对象理论之外的粗活打扫得干干净净,甚至在干了这些粗活同时,还衍生出很多巧劲十足的绝活。如此,SpringMVC这个架构扛起了MC的一大片天。若一个新生语言还没有孕生出自己IoC框架,一般我是懒得去看的。至于MC中的M,我还是看好Hibernate。
  2. 独立出的V,基于CSS和Javascript的话,我推荐用TypeScript书写的Angular2,原因是这儿有一个@angular/cli脚手架,简化或者说规则化了前端的开发,让单元测试这些工具有用武之地。Angular2优化了数据变更的触发机制,我认为现在Angular采用数据变化的侦测机制,是Javascript能做到的极致,即便有什么其它框架,只要它也要做相同的工作,无论被构建出的形式有什么不同,要做的事儿也无外乎那个样子,如此,怎么做也就未必有什么新意了。所以是否要选择Vue,还是Angular,可能仅仅是兴趣问题,而不是技术的问题。但从工程角度来说,我还是推荐使用Angular。
  3. 至于Android的V,它也是要MVVM的,因为ViewModel的价值在于数据双向绑定,显然Android不会撇下这个好处不要的,唯一不同的是,它是用Java来来实现MVVM的。

 

    这是我的一个全栈推荐。当然,其中任何一块都有各种选择,比如后端你可以用Nodejs、Python、PHP等等来替换Java。前端的框架手段更多,琳琅满目。总之,你若从整体上明白这前前后后的划分,就好像有了佛祖在胸中坐着了,选择什么语言,选择什么框架,那就只是酒肉穿肠过。但愿你不要挑食,什么语言都能吃得下,那才是最好的。

   特别的,最近出了大牛,叫kotlin。这个语言是java弟弟,他们共用JVM这个娘亲 。因为这个原因,它可以作为后端MC的开发,也被用作Android的开发语言,更神奇的是它可以作为Javascript的开发语言,这语言似乎能让你用一招就成为武林高手,这确实不可不察。唯一的缺点是它暂时没能写Angular,或许以后会有的。 

转载于:https://my.oschina.net/dayu6/blog/1618309

你可能感兴趣的文章
Building IKEv1 and IKEv2 on CentOS 7
查看>>
Zabbix server is not running:zabbix access denied
查看>>
我的友情链接
查看>>
linux下的软硬链接
查看>>
【JAVA的 IO流之FileInputStream和FileOutputStream】
查看>>
远程连接mysql 授权方法详解
查看>>
FreeBSD网络配置
查看>>
@synthesize window=_window; 的理解
查看>>
Greenlet理解要点
查看>>
罗森伯格应邀主讲CDCC百家大讲堂38期
查看>>
How to Install Nextcloud 13 Server on Debian 9
查看>>
[深入理解文件系统之一] IO系统调用
查看>>
Java之implements
查看>>
【资料收集】林内域或者林间域之间的账户、计算机迁移
查看>>
更新windows SID工具,对于虚拟机复制很有用
查看>>
安装TOMCAT
查看>>
-bash: lsof: command not found 解决方法
查看>>
《.NET应用架构设计:原则、模式与实践》新书博客--试读-2.1.2 设计原则实战
查看>>
大家技术探讨
查看>>
使用Myeclipse自带的xFire来实现WebService
查看>>