我是c#的新手,我正在尝试编写一个n层的Web应用程序。为了确保我将逻辑和代码放在正确的位置,我只是对我的代码放在哪里有疑问。
我有三个主要部分:
DataAccess代码 - 位于App_Code文件夹中名为“BusinessLogic”的文件夹中。
业务逻辑代码 - 位于App_Code文件夹中名为“DataAccess”的文件夹中。
表示层 - 所有用户界面
例如,如果我需要编写一个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,他们使用的是数据集。 任何帮助将不胜感激。
答案 0 :(得分:2)
我的典型方法是我开玩笑地称之为2.5层方法。
在这种方法中,我使用以下方法:
Presentation Layer
Businesss Object Layer / Data Serialization
Database Service Layer
业务层中的每个业务对象都有一个接受IDataReader的构造函数。然后读取此阅读器以填充对象。
数据库层包装了所有数据库访问请求并返回读者。
虽然这不像某些人想要的那样纯粹,但另一种方法是制作哑容器类来编组层之间的数据,我更喜欢使用IDataReader。
此外,通过使用IDataReader而不是SqlDataReader,我仍然可以与我的DAL松散耦合,并且可以实现任何形式的持久性,而不仅仅是SQLServer。
答案 1 :(得分:0)
这听起来像是一个经典的过度工程案例。
我不认为在学习阶段需要稍微过度工程,但我认为如果在任何时候它产生更多混乱,你需要退后一步并重新考虑你的方法。
尝试更多地了解ASP.NET,并且不要过于强调语义。如果你保持开放的态度并允许重构代码,你可能会自己回答你的问题。