java dal_DALFactory与IDAL的区别(花了一个多小时找到的)

业务逻辑层调用IDAL接口是对的,但说这里体现不了接口的优势是错的,这里正是体现接口优势的地方!

因为有了DAL层,软件可以轻易移植到不同种类的数据库上运行。不同种类数据库的具体编码不同,所以要分开实现,但无论数据库编码写么编,对于业务逻辑层来说,就是一个作用,保存数据!所以不同种类数据库DAL层都继承自IDAL,这样业务层就不用考虑调用的到底是哪种数据库来保存数据,只要按IDAL规定的方法存了就行。真正去存入数据库的时候,到底存到了哪种数据库里,就看对IDAL进行实例化的时候,生成的是哪种数据库的实例。

接口中定义了要用的方法,当调用接口时会根据具体的情况再去调用底层数据访问操作。而现在这个DALFactory就是关键,当BLL层要操作数据库时,DALFactory会根据具体情况再去使用SqlServerDAL和AccessDAL实现IDAL层的接口。(通过反射,动态生成访问类是PetShop.SQLServerDAL还是PetShop.OracleDAL命名空间中的类)。

web层-->BLL(使用Model)-->DALFactory(通过IDAL)-->具体DAL实现层(oracle或ms

sql)-->持久存储。

BLL层是怎么用到DALFactory的呢???请看下面的代码!!!

private static readonly ICaiFang dal =DALFactory.DataAccess.CreatCaiFang();

BLL调用工厂,工厂创建类调用方法,就看怎么实现IDAL,他就怎么调用。

个人理解:BLL层只是调用方法,方法是IDAL规定,受IDAL约束,具体操作那种数据库看DALFactory生成的那种数据库的实例。(这样理解好像是错的,请看下面的解释)

IDAL 是

DAL层的类要实现的接口

DAL层的各类需要完成对数据库的访问,但是不同的数据库需要使用不同的DAL对象,这样对于BLL层来说 无法实现数据库无关性

为了实现数据库无关性 可以将DAL对象转化为他所实现的接口类型,这样就和具体的数据库访问对象无关了

也就是说说 DAL对象 实现IDAL接口 上层程序 在使用时不直接DAL对象,而是使用IDAL接口

这里接口提供了充分的灵活性。

这个接口是对不同数据库来的统一,就像是人,人可以是不同肤色,但他们都是人。人就像接口,不同肤色的人就是数据库。

DALFactory层:

public static T

CreateObject(string

CacheKey)

{

T objType =

DataCache.GetCache(CacheKey);//从缓存读取

if (objType == null)

{

objType = (T)Assembly.Load(path).CreateInstance(CacheKey + "DAL");

反射创建 IDAL下的DAL

DataCache.SetCache(CacheKey,

objType);// 写入缓存

}

return objType;

}

///

/// 创建用户数据层接口

///

///

IRegUser用户数据接口

public static IRegUser CreatRegUser()

{

string CacheKey = path + ".RegUser";

return

CreateObject(CacheKey); //IRegUser下的RegUserDAL

}

然后是其他数据层接口。

DAL层: public bool Add(CaiFang Model)

{

SqlParameter[] param = {

new SqlParameter ("@title",SqlDbType.VarChar,300),

new SqlParameter ("@time",SqlDbType.VarChar,50),

new SqlParameter ("@place",SqlDbType.VarChar,300),

new SqlParameter ("@Organization",SqlDbType.VarChar,300),

new SqlParameter ("@leader",SqlDbType.VarChar,200),

new SqlParameter ("@description",SqlDbType.VarChar,800)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值