前些天做的一个物联网架构三层扩展

这些天在做一个在线物联的网站,同时也在往上查看了一些很好的网站架构,所以就根据自己的情况,指定了一种方案:
为了提交程序的:面向接口编程,高内聚、低耦合及其对扩充开发、对修改封闭的原则,对这次方案做简单的总结:

我的整体思想三层技术:UI(表现层)、BLL(业务逻辑层)、DAL(数据库访问层);

但是在我们的DAL层有很多种技术,提供我们去访问数据库,例如(ado.net、EF、NHibernate...),所以这样我们就要让DAL层对外要有一个统一的接口,使得内部操作数据库技术的变化不会涉及到BLL和UI层的代码,同理BLL层也是一样,他的修改不会牵连到UI层的展示,所以我把他们都分别分为两部分一部分是接口、另一部分是具体的实现,并且实现去继承这些接口,对外界访问的就只是这些接口;并且每一层中都是针对多张表的增删改查,因此抽象数来一张基类的增删改查的类,这样子类直接继承就不用都有自己的实现了,

由于底层访问数据库我使用的是EF实体模型,所以为了控制EF上下文在线程内唯一,使用了一个简单工厂,来获取数据,而且为了能和EF那样,只要拿到上下文对象,数据的所有操作方法及其数据对象也都在上下问对象中了,这种设计理念,在DAL层抽象出来了一个针对BLL层的DBSession类,它里面封装了所有表的操作数据库对象,及其数据库的上下文对象,所以只要拿到这个对象后就能拿到,所有的数据表操作对象,及其他的增删改查方法,但是要确保BLL层拿到的这个对象的唯一性,我有创建了一个针对获取DBSession对象的工厂,由于EF对象对数据表的增删改查有延迟性,并且每做一个增删改查的方法都要像数据库提交一次,所以我在这个类中又抽象出了一个方法,只有BLL层调用这个方法,才会对做的操作进行提交数据库处理,仔细想一下,这个方法的确很有必要,因为,我们在对表进行增删改查的时候,可能一个方法中,不仅仅对一张表的曾或者删或者查,这样只要统一调用一次保存方法,让这些sql语句放在一个队列中统一进行提交,统一访问一次数据库,这样不仅提交了对数据库的吞吐量,而且也减少了访问次数,仔细像起来面向接口编程,着实是一项开天辟地的新格局,有了他直接承载了我们的多态,及其设计程序的原则也丰富多元化了

posted @ 2012-09-10 22:48  plugin-loader  阅读(216)  评论(0编辑  收藏  举报