前端与后端分离的架构实例(三)
2014-02-19 14:30 麦舒 阅读(4741) 评论(18) 编辑 收藏 举报自从前几天写了篇前端与后端分离的架构文章,总觉得有点意犹未尽的感觉,于是乎准备把写成一个系统。准备逐渐深入地给大家去展现这个系统的架构。不过,我会写得比较随意,基本上想到什么就写什么,不会有很严谨的逻辑关系。
这个系统,是我现在正在开发的一个系统的架构,可不是什么理论或者拍脑袋想出来的。事实上,这个架构我思考了差不多一年了,还在上一家公司工作的时候,这个架构就在我的头脑中酝酿了,只可惜一直没有机会让我去做,很感谢现在的老板,给我这么一个机会,让我把它变为现实。
我们再来重温一下我所负责开发的系统的架构:
前段架构
在这个图里面,大家可以看得到,前端部份,是通个一个数据访问层去访问服务端的数据的,可以简单点说,是把远程的数据访问封装在一个类里。为什么要这么做呢?
我的设计理念里,后端为前端去提供服务,而前端则去消费这些服务。但是,为前端提供服务的,不仅包括我们现在所开发的后端,而且还会有第三方提供的服务。举一个例子来说:
我们开发的系统,要提供给某个商家去使用,这个商家,已经有现成的会员系统,它包括充值功能,并且这个系统也运行良好。这个商家并不愿意抛弃现有的系统,而使用我们提供的会员系统,他只要我们基于产品销售这个模块,当会员在网上下单的时候,我们的系统是要从商家提供的会员系统里扣除他的消费金额的。对于这种情况,我期待的是,我们需要做的只是替换掉数据访问层中的某个模块即可。所以你会看到,我们的系统是把数据访问部份独立了出来,但是实际上,这个数据访问层,还会包括若干个模块。
架构的复杂,是为了应对复杂的变化,如果你开发项目,只是在公司内部使用的,当然可以不去考虑这些。但是如果说要作为一个通用的产品,那就不得不去面对各种复杂的变化,尤其是系统集成这一块。
数据跟踪
什么叫数据跟踪呢?就是记录下每一次数据的变化,比如说,用户每一次对数据的删除、修改、插入操作,都要记录下来。我个人是很讨厌数据的假删除的,特别是到处都充斥着“where delete = true”,"update xxx set delete = true" 之类的代码。这种代码与业务是没有任何关系,但是却放在业务层里,我认为是非常的不合理的。处理办法两种:
1、放在数据访问层,通过 ORM 去处理,只需要通过配置,就可以把删除操作变为更新操作。当然,业务层的代码,还是按删除来处理。
2、使用的是真删除,但是对删除的数据进行记录。由于把删除的数据记录了来,当然也可以把它还原了。
那如何去实现它呢?如果你使用的是 Linq to SQL,大家可以看我之前写的《Linq to SQL (ALinq) 也来AOP —— ALinq Inject 博客园首发》 ,它会告诉如何把删除、更新、插入操作拦截下。
使用工厂模式创建实体
你的代码里是否到处充斥着类似下面的这种代码呢?
var obj = new Account(); obj.ID = Guid.NewGuid(); obj.CreateDateTime = DateTime.Now;
当然,可以通过代码生成来解决。但是如果使用的是 Linq to SQL,就没有那么好办了。我使用的是另外一种办法,使用工厂模式来创建实体。例如:
public T CreateEntity<T>() where T : class, new() { var entity = new T() as dynamic; entity.ID = Guid.NewGuid(); entity.CreateDateTime = DateTime.Now; var applicationIdProperty = typeof(T).GetProperty("ApplicationId"); if (applicationIdProperty != null) entity.ApplicationId = this.ApplicationId; return entity; }
好了,这次就先聊到这里,我很希望有更多的人加入我们的团队,一起去完成这个架构。
招聘开发人员:懂 JQuery、JQuery UI、JQuery Validate、Knockout JS 等JS 框架,略懂 Linq to SQL,能阅读文档,根据文档示例写代码。(欢迎勤奋好学的毕业生)
1、侧重前端开发,如果有能力,也可以从事后端开发。
2、工作努力认真,对自己负责,也对客户负责。
加入我们团队,在我的指导下,只要你肯努力,绝对能够得很快的成长,相信我。^_^
有兴趣的朋友可以加我 QQ 私聊。
地点:上海市闸北区
网站:http://www.vknew.com/index.html