在做网站的时候我把BLL和DAL分开,在BLL调用DAL的代码时遇到了三种选择:
一、在DAL中使用静态方法,不创建实例直接调用:
class DAL
{
public static string GetUserName(...);
}
在BLL中调用:
DAL.GetUserName();二、在DAL中使用实例方法,采用静态成员模式(或Singleton)通过实例来调用:
class DAL
{
public static readonly DAL dal = new DAL();
public string GetUserName(...);
}
在BLL中调用:
DAL.dal.GetUserName();三、在DAL中使用实例方法,每次调用之前先创建DAL对象的实例:
class DAL
{
public string GetUserName(...);
}
在BLL中调用:
DAL dal = new DAL();
dal.GetUserName();这三种方式我都在实际项目中见过,都能实现一样的功能,但是想不出来他们有什么区别,或者三种方案的适用范围。
请问以上三种方案哪种更好?或者三种方案分别在什么情况下使用最好?
欢迎讨论!
一、在DAL中使用静态方法,不创建实例直接调用:
class DAL
{
public static string GetUserName(...);
}
在BLL中调用:
DAL.GetUserName();二、在DAL中使用实例方法,采用静态成员模式(或Singleton)通过实例来调用:
class DAL
{
public static readonly DAL dal = new DAL();
public string GetUserName(...);
}
在BLL中调用:
DAL.dal.GetUserName();三、在DAL中使用实例方法,每次调用之前先创建DAL对象的实例:
class DAL
{
public string GetUserName(...);
}
在BLL中调用:
DAL dal = new DAL();
dal.GetUserName();这三种方式我都在实际项目中见过,都能实现一样的功能,但是想不出来他们有什么区别,或者三种方案的适用范围。
请问以上三种方案哪种更好?或者三种方案分别在什么情况下使用最好?
欢迎讨论!
我姑且把 UserName 认为是连接数据库时使用的用户名方式一:
在数据库只有一个的情况下,没有什么问题,但在GetUserName()内部要注意考虑线程安全以及其他的一些问题。方式二:
看着比较奇怪的使用方式。在静态成员模式下一般习惯使用factory的方式去创建这个成员,而且这种方式下整个系统中只有一个dal对象,莫非是CS的结构?方式三:
可以兼顾各种情况,所以使用的相对多一些。
微软在Petshop 2及以前的版本中使用的就是这种方法
但是微软在Petshop 3中改成了第三种方法,并在介绍中说明了这是一项改进
只是我不明白是为什么,是不是说第三种方法比第一种方法好吗?mmqingfeng(漠漠青峰):
你所说的可以兼顾各种情况出了线程问题以外还有什么情况?