一个优秀的WEB架构一定要应用一些分层的设计思想,这样可以使系统开发更加灵活,也便于后期维护。本文作者麦树设计了前后端分离的架构。原文分享如下:看完《系统架构:Web应用架构的新趋势—前端和后端分离的一点想法》一文,赞同前后端分离。这对系统的维护有很大的好处。.正好我也设计了这样一个系统,就拿出来和大家一起讨论。这个架构与其说是一个想法,倒不如说是我从系统中总结出来的最佳实践。在我们做的系统中,前端页面基本上都是使用JavaScript的富客户端页面。主要应用框架有jquery、jqueryui、knockoutjs、Durandal。此外,还有一些我们自己封装的UI组件。后端主要用到的技术有OData、MVC、LinqtoSQL,还有自己写的一个权限管理组件。数据库使用的是SQLServer2005,下面介绍一下各个模块的作用和划分的目的。让我们从用户界面开始。首先,前端dataProvider只是一个接口调用的数据访问层。很多人都有这样的疑问。,在这里加一个数据访问层是不是多此一举?只要做前端,就会遇到以下问题:1、对于一个产品或项目,前端和后端是同时进行的。这个时候根本就没有后端接口,甚至可以说没有接口的定义。.作为一名前端开发人员,你是如何开展工作的?2、作为前端开发者,你是否遇到过因为后台接口宕机而无法继续工作的情况?3、作为前端开发者,很多时候都免不了要对接第三方接口。你有没有遇到过一个和你有缘的人,却因为项目太紧突然被带走,留给你的只有一堆需求?传N个参数,传完就抛出“对象为空”的异常怎么办?你不知道参数哪里错了。面对这些接口,你除了大喊大叫之外,得不到任何帮助。4.作为一个前端开发者,你有没有试过,你向后端开发团队要一个接口,他们要讨论几天,然后再过几天给你。调试需要多少天?如果你和我一样,以前遇到过这些问题,你就不会怀疑这个dataProvider的必要性了。有了这个dataProvider,就可以将后端接口对前端开发的影响降到最低。下面是dataProvider的例子:vardataProvider=(function(){varfakeProvider={countries:newCountries()};varrealProvider={countries:newJData.WebDataSource()};//如下接口,根据第二种情况ChooseareturnfakeProvider;//ThisisafakedataProvider,readfromthelocalreturnrealProvider;//ThisisarealdataProvider,readfromtheinterface})();从上面可以看出,这个dataProvider是使用工厂模型创建的,它有两个实例,fakeProvider和realProvider,fakeProvider用来提供一些模拟数据,realProvider提供从接口读取的数据。当没有接口,或者接口宕机时,我们可以先从fakeProvider中读取数据。当接口准备好后,切换到realProvider。二、用户界面输入的校验1、数据校验。用户在接口中输入数据后,再调用dataProvider中的接口对数据进行处理,但数据在提交给服务器之前必须经过校验。该验证如何工作?dataProvider首先从服务器获取实体的描述信息。这些描述包括但不限于:主键和外键、属性验证信息(比如是否可为空),当然这些实体信息可以缓存起来以供复用。然后dataProvider根据这个描述信息对数据进行校验。2、错误信息的显示当验证到某个属性不合法时,信息验证模块会在页面上找到对应的输入控件。它是如何找到它的?例如,Contry的Name输入是不允许为空的。然后它首先查找id为Coutry的元素,然后在Coutry元素下查找id或name为Name的控件。如果找不到,会直接弹出错误信息。例如:
