程序员人生 网站导航

由简单三层到工厂模式

栏目:php教程时间:2015-04-11 09:14:44

以ASP.NET为例,简单3层就是 DAL, BLL,Model 3层构成, DAL层处理数据,负责与数据打交道,比如SQL语句的书写等,DAL层处理完数据后的结果,交由BLL层,BLL层这时候对数据进行逻辑整理。具体以下详细说明:

 

现有1个简单的需求,1个定单里可能包括几个产品,这时候,我们1般这样处理,把定单写在主表,把具体的详细商品写在定单详细表,详细表中有1个主表的ID,用于关联2表。当用户下单提交时,处理以下:

 

两个表设为 主表Orders, 副表 OrderItem

 

DAL层:写SQL语句,分别写两个方法,1个是插入主表的方法,另外一个是插入副表的方法。

 

插入主表Orders

public long Add(ModelOrder model) { …… }

插入副表OrderItem,语句这里略掉,这里只说明思路,不做真实的数据。

public long Add(ModelOrderItem model) { …… }

这两个方法,首先履行第1个返回的ID,然后第2个方法要用到这个返回的ID,那末这个逻辑处理就在BLL层里来处理了,这样写:

//插入主表后返回的ID long id = DAL.Add(model); //如果履行成功,说明ID>0 if(id>0) { DAL.Add(model); }

这个方法履行完,再返回到页面层级结果。

 

注意:其实上面的业务层处理严格的说写的不正确,为何呢?假想我们插入主表成功了,但返回ID后,插入副表的时候,出错了,没有插入,那末就会造成数据库里只保存了定单信息,但没有定单详情信息。如何解决呢?自然我们会想到了事务,1旦出现上述情况,使用事务时,数据库会回滚,就是第2步出错了,那末第1步也会撤销。


using (SqlTransaction transaction = connection.BeginTransaction()){}

固然,这就个就要写在DAL层里了,在DAL层里把各个的添加方法写好了,然后在写1个方法,这个方法就是把各个方法加到事务中去,如果有1条语句履行时出错,则事务回滚,等于没有操作。

 

这基本上是1个简单3层的形象的最简单的介绍,那末简单3层有时候不能满足我们需要,比如说,你是1家软件公司,那末你开发了1个软件,用的SQLServer,而恰好碰到1个客户需要使用oracle,或是mysql,怎样办?固然,你也能够改,但是改的东西多了,最最少全部数据层都要被你扒了1遍了,而有1种方法基本不用怎样修改就能够到达需求,那就是工厂模式。

 

简单介绍:使用工厂模式,面向接口的编程,把数据层和业务层使用接口来交接,面向接口,不面向具体的实现,只要操作接口,实现变了也无所谓。


首先我们还是定义SQLServerDAL,BLL,Model3层,这次我们把DAL与BLL不直接进行交互了,中间插入1个IDAL接口层,这个接口负责与BLL通讯,

BLL通过工厂反射等创建接口IDAL,


private readonly IOrderAction dal = DAOrder.CreateOrderAction();

SQLServerDAL只需实现IDAL便可,

public partial class Orders:IOrders

如果某1天你想换数据库,只需加相应的接口实现便可。

比如添加1个OracelServerDAL等

或是你提早把全部的数据层写好SQLServerDAL,OracelServerDAL,MySqlServerDAL……要哪一个用哪一个

固然,工厂模式带来的好处也绝不单单是上述这点功劳。


 

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐