2009-05-05 94 views
0

我对c#相当陌生,并且正在尝试编写一个n层的web应用程序。为了确保我把逻辑和代码放在正确的位置,我只是有一个关于在哪里放置我的代码的问题。我应该在哪些部分放置我的SqlDataReader代码?

我有三个主要部分:

  1. 数据访问代码 - 名为 “BusinessLogic” 我App_Code文件夹内的文件夹内。

  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的方法吗? EG

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在他们使用数据集的教程中改为使用数据集。 任何帮助将不胜感激。

回答

2

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

在这种方法中,我用下面的办法:

   Presentation Layer 

       Businesss Object Layer/Data Serialization 

       Database Service Layer 

在业务层的每个业务对象都有一个接受的IDataReader的构造函数。然后阅读这个阅读器来填充对象。

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

尽管这不像有些人所希望的那样纯粹,但另一种方法是使用哑元容器类来编组层级之间的数据,而我更喜欢使用IDataReader。

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

+0

嗨FlySwat,感谢您的及时回应。我喜欢你的方法。你能给我一个简单的例子来展示吗? – Jason 2009-05-05 23:53:48

0

这听起来对我来说就像一个经典的过度工程案例。

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

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

相关问题