现在的状况是这样的,我的项目需要支持多种数据库,在项目第一次启动的时候检测数据库配置,并设置数据库参数。
现在DAL已经写完了,大概的结构是:
每一个业务逻辑写一个数据操作接口,如:ISysUserDAL.cs然后每种数据库操作写不同的数据操作类,来实现上面的接口,如:
public class SqlServer2000SysUserDAL : ISysUserDAL
public class OracleSysUserDAL : ISysUserDAL
现在的问题是BLL怎么设计呢?
原则:
1、UI层调用方便
2、且针对不同的数据库可能特殊逻辑,比如:针对Oracle和SqlServer的文本字段操作是不同的,SqlServer可能就是比较大众化的,直接存储VARCHAR就可以了,但是Oracle可能就是BLOB字段,所以需要考虑这样的扩展。
都可以说,越细越好,都有分。多谢!
现在DAL已经写完了,大概的结构是:
每一个业务逻辑写一个数据操作接口,如:ISysUserDAL.cs然后每种数据库操作写不同的数据操作类,来实现上面的接口,如:
public class SqlServer2000SysUserDAL : ISysUserDAL
public class OracleSysUserDAL : ISysUserDAL
现在的问题是BLL怎么设计呢?
原则:
1、UI层调用方便
2、且针对不同的数据库可能特殊逻辑,比如:针对Oracle和SqlServer的文本字段操作是不同的,SqlServer可能就是比较大众化的,直接存储VARCHAR就可以了,但是Oracle可能就是BLOB字段,所以需要考虑这样的扩展。
都可以说,越细越好,都有分。多谢!
NHibernate
根据数据库不同,动态配置NHibernate的数据库方言(Dialect).
DAL层完全不需要针对不同数据库写不同的代码.
首先谢谢,不过我现在的状况是DAL已经完成了,我现在对BLL很迷惑,不知道如何设计
2、把ISysUserDAL.cs等接口单独放到一个项目里,成为独立的数据接口层。DAL引用这个数据接口层,实现里面规定的方法;BLL也引用这个数据接口层,调用接口层确定的方法。
3、BLL里写一段反射代码,根据DAL编译出的dll文件名和数据接口层里的interface反射加载DAL。这样可以通过提供不同的dll文件名加载不同的dll。
嗯,说得有道理,但是我现在的DAL设计如下:
首先DBUtility包含DbHelperSQL.cs DbHelperOracle.cs各数据库的基本类;
然后
每一个业务逻辑写一个数据操作接口,如:ISysUserDAL.cs然后每种数据库操作写不同的数据操作类,来实现上面的接口,如:
public class SqlServer2000SysUserDAL : ISysUserDAL
public class OracleSysUserDAL : ISysUserDAL怎么设计才能支持数据库的多元化的扩展呢?
oleconnection
sqlconnection
oracleconnection 继承于:idbconnection
最基本的责任你还没弄清楚。清洗白菜,萝卜是一个洗法清洗鸡鸭鱼肉又是一洗法问题是这不是大厨关心的事情,无论是mssql这种白菜萝卜,还是啥Oracle这种鸡鸭鱼肉,洗菜的是DAL大厨BIL才不管你怎么洗,你爱怎么洗怎么洗,你可以手工拔毛,也可以用高科技的脱毛机,怎么弄把毛弄干净了,和大厨BIL没关系
多谢,看了5楼我已经明白这个问题需要在DAL解决了,但是这DAL一层怎么设计呢(参考10楼)?
每一个业务逻辑写一个数据操作接口,如:ISysUserDAL.cs然后每种数据库操作写不同的数据操作类,来实现上面的接口,如:
public class SqlServer2000SysUserDAL : ISysUserDAL
public class OracleSysUserDAL : ISysUserDAL这样不是已经实现你的功能了么,你的bll层只是用ISysUserDAL接口,压根就不使用SqlServer2000SysUserDAL 和OracleSysUserDAL 这儿还需要一个工厂,不然
ISysUserDAL su = new SqlServer2000SysUserDAL(); 这样就麻烦了,要改成ISysUserDAL su = xxx.GetDAL("SqlServer2000");