0

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

我有三个主要部分:

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

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

  3. 表示层 - 所有的 UI

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

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

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

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

IE 在 BLL 中我应该添加一个名为 DAL 的方法吗?例如

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

然后在我的 DAL 中,我有一种方法来执行实际的 SqlDataReader EG

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

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

4

2 回答 2

2

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

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

                Presentation Layer

                Businesss Object Layer / Data Serialization

                Database Service Layer

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

数据库层包含所有数据库访问请求并返回阅读器。

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

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

于 2009-05-05T23:40:57.557 回答
0

在我看来,这听起来像是过度设计的经典案例。

我不会争辩在学习阶段需要一点过度设计的事实,但我认为如果在任何时候它会产生更多的混乱,你需要退后一步并重新考虑你的方法。

尝试更多地了解 ASP.NET,不要对语义过于紧张。如果您保持开放的心态并允许重构您的代码,您可能能够自己给出问题的答案。

于 2009-05-05T23:42:19.817 回答