由简单三层到工厂模式

以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……要哪一个用哪一个

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

 

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 本站源码并不保证全部能正常使用,仅供有技术基础的人学习研究,请谨慎下载
8. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » 由简单三层到工厂模式

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡