2009-05-05 50 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的知識,不要過分強調語義。如果你保持開放的態度並允許重構你的代碼,你可能會自己給出你的問題的答案。

相關問題