做了一段时间的web应用接触了一些框架自然也会有自己的一些思考。现在做Web比较流行的语言应该也就Java PHP 还有.Net 这么几种吧。他们当中以PHP最为简单,容易上手但是支持它好的分层框架似乎还没有,以前搜索过大多都是一些CMS之类的,个人觉得比较好的是WordPress,它的理念不错,对于需要的功能只要自己做插件就好了,但是这里面有一个问题,这些框架大部分都是与内容信息系统相关的,如果要做应用恐怕还不是很给力,像Java 的SSH 和 .net的MVC(现在好像已经到3.0版本了)这样的支持三层架构的框架在PHP里好像还没有至少我到现在也没有发现。

   对于SSH 和 Asp.Net Mvc 这样的支持三层架构的框架都有个特点,他们适合大型应用这是无疑的,而且使用他们可以使系统的结构更清晰,而且比较适合团队合作开发,因为MVC架构的特点就是Model 、Controller 和View 三个层次都可以独立的开发并且可以独立的做每个部分做单元测试,这对于一个团队来说是很重要的,因为每样工作都可以独立来完成而且不太容易受到别人工作的影响,只要各层次间约定好通信协议就可以了。但是这些结构是不是就很好了呢,我不觉得,首先SSH 是针对Java 的,Asp.net Mvc是针对.Net开发的,他们都是为独立的一门语言开发的,而且在具体实现的时候View里面难免面有服务器代码如Java或C#。试想下,View在三层架构里面是用作表示层,用于将数据展示给用户并接受用户的输入的一个交互界面,这一层一般是由UI工程师独立开发的,并在开发结束后交给后台编码人员使用,那么编码人员从UI设计人员那里拿到的是什么呢?一般是Html Css Js 之类组织起来的东西,那么这些东西是可以直接用来做View的吗?应该不是,至少我现在了解到的是这样的,大部分后台编码人员都是在UI设计人员产出的基础上再进行修改完成最终的View,如将Html加入Java代码形成最终的Jsp 文件或者加入 C#代码形成最终的.net文件得到最终的View。那么有没有一种方式是UI设计人员可以独立完成View的所有工作最后产出的就是一个符合要求的View 而后台编码人员又不需要再对View进行修改的开发方式呢?我觉得是有的。首先我们来分析下UI设计人员应该掌握的Web客户端编程技能有哪些,html 和css 这个是必需的,js 这个作为一个和个的UI工程师我觉得也是必需的。那么我们假定UI工程师现在已经掌握了上述三种编码技能,那么我们再来看下每种语言能做什么.html负责结构,css负责布局与美化,js 则负责行为即动态交互功能。js 可以采用ajax 技术在服务器获取数据。当然如果从头开始实现可以跨浏览器的js还是有一定难度的,幸好有很多库可以使用如 JQuery 和 MoolTools都是不错的选择。有了这些js 框架辅助我们要实现跨浏览器的Ajax通信就很简单了,所以UI工程师是应该掌握这些的。通过上述信息我们可以看到,js 可以很容易的在服务器获取数据,那么我们是否可以考虑将js 发出的请求的数据和服务器对该请求处理后的应答的数据进行格式化约定呢?答案肯定是可以的,因为我们有Json 这个 在java .net 和 javascript 语言里都有很好的支持就连php 也是有原生的函数对其进行支持,所以我们完全可以采用json 在浏览器和服务器间传递数据。既然在浏览器和服务器间可以通过json 传递数据那么浏览器里跑着的有 html css 和javascript的东西又是什么呢?肯定有大部分人说这是应用程序的界面,没错确实是界面,这没什么错误,因为我们一直都这么看。虽然以前我也是这么认为的,但是现在我不这么想了,因为我现在更觉得它像是一个独立的软件,就类似于从前的C/S中的C,就一个客户端他也是一个软件只是它的运行平台是浏览器而已,我并不认为这是一个错误,至少现在我没有找到反驳我的理由。既然 浏览器里跑着的由html 和 css 及js 构成的东西是客户端,那么由java  php 或 c# 编写的在后台运行的jsp php 或aspx的文件组成的东西我可以看作是一个独立的服务器,他是为 html css js 这些东西组成的客户端软件服务器的,我觉得这么想没做,于是我现在可以把它们看作是两个独立的软件在通信,我可以之间定义通信协议,这样基于这个思想实现的客户端和服务器在逻辑上是两个独立的软件,一个运行于客户的浏览器里,这个客户端我称之为BC,另一个 是运行于业务服务器,是为BC提供业务支持的服务器,我称之为S,他们之间通过JSON进行通信。那么这样带来的好处理,UI工程师可以独立完成BC的开发,包括数据的显示和获取等一些列的操作,而不用关心服务器是用什么语言开发的应为BC里面不会出现Java 或 PHP等这样的服务器语言,不仅如此后台编码人员只要按照彼此的约定实现JSON定义的命令和数据响应等为BC提供收发数据及处理数据的能力即可,而不用再去修改UI工程师产生的UI,因为此时他关心的只是一些列的Json封装的命令和数据。

  类似于Java 的 SSH 和Asp.net MVC 框架,我所提到的这种设计模式也可以设计成MVC的模式(MVC的核心思想是分离,对于具体的实现每个框架都有自己的特点,所以在此不做争论),我们的BC客户端在系统中称之为View ,接收 和响应BC请求的是一些列的jsp 、php或aspx等具体是哪一种看采用具体语言决定,在这些文件里我们仅需要接收BC的数据并向BC返回操作结果或数据集合(被JSON包装的数据),至于Model则根据采用的具体编程技术可以是 dll 也可以是 javabean 也可以是php 的class等。

   关于本文所讲述的web 应用设计方法有什么好处呢?我个人觉得好处是,UI工程是产出的是独立的软件不需要在由后台编码人员进行修改,其次是服务器可以由任何服务器语言编写,如java 或php都可以,只要实现了JSON定义的通信协议就可以,对BC客户端来说需要修改的只是请求的文件的后缀而已其余都可以不用个修改。而且此时实现的View 也很容易在其他项目里面复用,因为在view 里面没有对具体的服务器语言的依赖,如SSH的View要依赖于structs 或jsp 的标签等。

   注:以上所属为本人工作心得,和今日对Web应用程序所思所想,不足之处上多,文中所提及的设计方法也正在努力探索中,至于好与坏各抒己见,欢迎文明拍砖