我应该在哪个部分放置我的SqlDataReader代码?

时间:2009-05-05 23:34:32

标签: business-logic data-access-layer

我是c#的新手,我正在尝试编写一个n层的Web应用程序。为了确保我将逻辑和代码放在正确的位置,我只是对我的代码放在哪里有疑问。

我有三个主要部分:

  1. DataAccess代码 - 位于App_Code文件夹中名为“BusinessLogic”的文件夹中。

  2. 业务逻辑代码 - 位于App_Code文件夹中名为“DataAccess”的文件夹中。

  3. 表示层 - 所有用户界面

  4. 例如,如果我需要编写一个SqlDataReader来从我的数据库中检索记录,我将在哪里编写代码?在BLL或DAL?

    IE从表示层我调用BLL代码。

    ContentBLL content = new ContentBLL();
    //some code to call the BLL layer...
    

    这是我开始感到困惑的地方。在我正在调用的业务层逻辑层中,我是在这里编写SqlDataReader代码还是再创建一个步骤并在数据访问级别中编写SQlDataReader代码。

    IE在BLL中我应该添加一个调用DAL的方法吗? E.G

    public static ContentBLL GetPageContent(intID)
    {
    return ContentDAL.GetItem(ID)
    }
    

    然后在我的DAL中我有一个方法来执行实际的SqlDataReader E.G

    public static ContentBLL GetItem(int id)
    {
    //return the SqlDataReader code...
    }
    

    我一直在尝试从asp.net网站上的教程中学习,但是对于本教程中的DAL,他们使用的是数据集。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

我的典型方法是我开玩笑地称之为2.5层方法。

在这种方法中,我使用以下方法:

                Presentation Layer

                Businesss Object Layer / Data Serialization

                Database Service Layer

业务层中的每个业务对象都有一个接受IDataReader的构造函数。然后读取此阅读器以填充对象。

数据库层包装了所有数据库访问请求并返回读者。

虽然这不像某些人想要的那样纯粹,但另一种方法是制作哑容器类来编组层之间的数据,我更喜欢使用IDataReader。

此外,通过使用IDataReader而不是SqlDataReader,我仍然可以与我的DAL松散耦合,并且可以实现任何形式的持久性,而不仅仅是SQLServer。

答案 1 :(得分:0)

这听起来像是一个经典的过度工程案例。

我不认为在学习阶段需要稍微过度工程,但我认为如果在任何时候它产生更多混乱,你需要退后一步并重新考虑你的方法。

尝试更多地了解ASP.NET,并且不要过于强调语义。如果你保持开放的态度并允许重构代码,你可能会自己回答你的问题。