代码改变世界

前端与后端分离的架构实例(三)

2014-02-19 14:30  麦舒  阅读(4721)  评论(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