加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

Asp.net DAL和BLL首选设计模式方法

发布时间:2020-12-16 09:57:33 所属栏目:asp.Net 来源:网络整理
导读:我正在开发一些小型ASP.NET应用程序,并想知道什么模式.你在项目中使用的方法吗? 我的项目涉及数据库,使用数据访问和业务逻辑层. 到目前为止我使用的数据访问方法如下(我在一些书中读到并喜欢它): 对于DAL层: 创建一个抽象类,定义要实现的所有数据库操作方
我正在开发一些小型ASP.NET应用程序,并想知道什么模式.你在项目中使用的方法吗?

我的项目涉及数据库,使用数据访问和业务逻辑层.

到目前为止我使用的数据访问方法如下(我在一些书中读到并喜欢它):

对于DAL层:
创建一个抽象类,定义要实现的所有数据库操作方法.
抽象类将包含一个静态“实例”属性,它将加载(如果实例== null)所需类型的实例(Activator.CreateInstance)(实现它的类).

创建一个实现这个抽象类的类,实现将根据使用的数据库(SQL,mySQL等).
有了这个,我可以根据使用的数据库创建不同的实现.

对于BLL层:
封装所有检索到的字段的类,以及将调用DAL类的静态方法.

这是一个好方法吗?
在这些情况下你更喜欢用什么?

解决方法

通过使用静态类方法,您将隐藏对这些组件的依赖关系并在将来限制您的选项(例如,您不能将业务层子类化).

不要将单例和静态方法用于数据访问和业务层,而是考虑更改业务层类以要求数据访问实例,并在顶级应用程序中保留业务层的单个实例:

public class Global HttpApplication {

    // This would really be a property
    // It's also unfortunate this has to be static,but you're stuck with
    // default constructors for ASP.NET pages,so there's no alternative.
    public static BusinessLayerClass BusinessLayer;

    protected void Application_Start(object sender,EventArgs e) {
         AbstractDataAccessLayer dataAccess = new ConcreteDataAccessLayer();
         Global.BusinessLayer = new BusinessLayerClass(dataAccess);             
    }
}

然后页面使用它像这样:

public void PerformSomeBusinessFunction() {
    Global.BusinessLayer.DoSomething();
}

这很明显,您的业务层需要数据访问,提供了一个方便的位置来指定它将使用哪种类型的数据访问对象,并为您在必要时使用不同的创建策略铺平了道路.例如,您可能提供数据访问工厂,而不是在所有业务层中共享单个实例.

这里的一般原则称为“dependency injection”(有时它被称为“控制反转”,这是DI背后更普遍的原则.)

如果这个dependency injection by hand开始变得麻烦,可以考虑使用a dependency injection framework(人们也称这些“IoC容器”).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读