由简单三层到工厂模式
以ASP.NET为例,简单三层就是 DAL,BLL,Model 三层构成, DAL层处理数据,负责与数据打交道,比如SQL语句的书写等,DAL层处理完数据后的结果,交由BLL层,BLL层这时对数据进行逻辑整理。具体如下详细说明: ? 现有一个简单的需求,一个订单里可能包含几个产品,这时,我们一般这样处理,把订单写在主表,把具体的详细商品写在订单详细表,详细表中有一个主表的ID,用于关联二表。当用户下单提交时,处理如下: ? 两个表设为 主表Orders,副表 OrderItem ? DAL层:写SQL语句,分别写两个方法,一个是插入主表的方法,另一个是插入副表的方法。 ? 插入主表Orders public long Add(ModelOrder model) { …… } 插入副表OrderItem,语句这里略掉,这里只说明思路,不做真实的数据。 public long Add(ModelOrderItem model) { …… } 这两个方法,首先执行第一个返回的ID,然后第二个方法要用到这个返回的ID,那么这个逻辑处理就在BLL层里来处理了,这样写: //插入主表后返回的ID long id = DAL.Add(model); //如果执行成功,说明ID>0 if(id>0) { DAL.Add(model); } 这个方法执行完,再返回到页面层级结果。 ? 注意:其实上面的业务层处理严格的说写的不正确,为什么呢?设想我们插入主表成功了,但返回ID后,插入副表的时候,出错了,没有插入,那么就会造成数据库里只保存了订单信息,但没有订单详情信息。如何解决呢?自然我们会想到了事务,一旦出现上述情况,使用事务时,数据库会回滚,就是第二步出错了,那么第一步也会撤消。 using (SqlTransaction transaction = connection.BeginTransaction()){} 当然,这就个就要写在DAL层里了,在DAL层里把各个的添加方法写好了,然后在写一个方法,这个方法就是把各个方法加到事务中去,如果有一条语句执行时出错,则事务回滚,等于没有操作。 ? 这基本上是一个简单三层的形象的最简单的介绍,那么简单三层有时候不能满足我们需要,比如说,你是一家软件公司,那么你开发了一个软件,用的SQLServer,而刚好碰到一个客户需要使用oracle,或是mysql,怎么办?当然,你也可以改,但是改的东西多了,最起码整个数据层都要被你扒了一遍了,而有一种方法基本不用怎么修改就可以达到需求,那就是工厂模式。 ? 简单介绍:使用工厂模式,面向接口的编程,把数据层和业务层使用接口来交接,面向接口,不面向具体的实现,只要操作接口,实现变了也无所谓。 首先我们还是定义SQLServerDAL,Model三层,这次我们把DAL与BLL不直接进行交互了,中间插入一个IDAL接口层,这个接口负责与BLL通信, BLL通过工厂反射等创建接口IDAL, private readonly IOrderAction dal = DAOrder.CreateOrderAction(); SQLServerDAL只需实现IDAL即可, public partial class Orders:IOrders 如果某一天你想换数据库,只需加相应的接口实现即可。 比如添加一个OracelServerDAL等 或是你提前把全部的数据层写好SQLServerDAL,OracelServerDAL,MySqlServerDAL……要哪个用哪个 当然,工厂模式带来的好处也绝不仅仅是上述这点功劳。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql-server – Visual Studio数据库项目:在创建之前检查SQ
- 关于SQLServer2005的学习笔记――约束、Check、触发器的执行
- SQLServer之创建标量函数
- SQL Server 计算两个日期相差的工作天数的语句
- SQLSERVER数据库中的字段类型对应的java类型
- sql-server – 来自不同进程中相同临时表的锁的死锁
- winform程序自定义打包步骤
- 在SQLServer 2005附加SQLServer 2008数据库异常处理
- 当 MUST_CHANGE 为 ON (开)时,不能将 CHECK_POLICY 和 CHE
- sql – 什么是VertiPaq及其工作原理