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

标签 asp.net design-patterns

我正在开发几个小型 ASP.NET 应用程序,想知道是什么模式。您在项目中使用的方法。

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

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

对于 DAL 层:
创建一个抽象类来定义要实现的所有数据库操作方法。 抽象类将包含一个静态“Instance”属性,它将加载(如果instance == 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 容器”)。

关于Asp.net DAL 和 BLL 首选设计模式方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2372882/

相关文章:

java - 保持内存中更改与后端同步的好方法是什么

python - 仅对具体类为 True 的静态属性,在 Python 中对其子类为 False

asp.net - Visual Studio 性能编码 UI - 弹出窗口损坏,因为 Web 测试记录器导致它在完整窗口中打开

c# - 接口(interface)类型方法参数实现

c# - JavaScript 运行时错误 : Unable to get property 'msie' of undefined or null reference

c# - AutoMapper - 将源对象映射到嵌套对象

javascript - 你们如何处理操作顺序很重要的复杂状态情况?

design-patterns - 传递部分完整的构建器实例

java - 理解装饰器设计模式

java - 从jsp调用aspx页面