在VS2010中建立C#三層結構


轉自:http://www.blueidea.com/microsoft/vs2010/2010_con/2010081301.htm

三層結構,會有多個項目。為了讓各項目之間的關系反映在目錄結構上所以要建立一個解決方案。

1.建立解決方案:
文件->新建項目->其它項目類型->Visual Studio解決方案->空白解決方案。

2.在解決方案里添加第一個項目
建立空白解決方案后,在vs2010右邊的解決方案資源管理器中,可以看到剛建立的解決方案,單擊選中它,然后右鍵選擇“添加”->新建項目->Visual C#- >ASP.NET Web應用程序 ,把名稱命為:Web,點擊確定后就在解決方案里建立了一個Web項目。

3.在解決方案里添加第二個項目

在解決方案里加入第一個項目后,再加入第二個項目,第二個項目和添加與第一個項目的添加有一點差別,添加第二個項目的步驟是:文件->新建項目->Visual C# ->類庫。

選擇“類庫”以后,把名稱命名為:BLL,在最下面的“解決方案”里選擇“添入解決方案”,意思就是把新建的這個BLL項目,添入到建立的KaiBo解決方案里。

剛才建立的兩個項目就在解決方案里很好的組織起來了。

4.在解決方案里添加其它的項目
添加兩個項目后,為解決方案添加更多的項目就只需選中解決方案,右鍵“添加”->新建項目->Visual C#->類庫。再自已命名項目名稱就可以了。

1、WEB=表示層 2、BLL=業務邏輯層 3、IDAL=數據訪問層接口定義 4、Model=業務實體 5、DALFactory=數據層的抽象工廠(創建反射)
6、SQLServerDAL=SQLServer數據訪問層 / OracleDAL=Oracle數據訪問層 7、DBUtility 數據庫訪問組件基礎類

多了一個WebControls項目,那是我寫的一些自定義控件。如果需要,還可以往解決方案里加入更多的項目。到此為止解決方案就建立完成了。但是各項目之間還是各自獨立的 ,要想相互調用就要建立項目間的引用關系。

在vs2010里面把解決方案中的各個項目都建立好之后,就要實現各項目之關的引用了.在前面,我們建立了7個項目.它們分別是:
WEB:表示層
BLL:業務邏輯層
IDAL:數據訪問層接口定義
Model:業務實體
DALFactory:數據層的抽象工廠(創建反射)
SQLServerDAL:SQLServer數據訪問層
DBUtility :數據庫訪問組件基礎類
各項目之間的引用關系可用下圖表示:

Web 引用 BLL,SQLServerDAL
BLL 引用 IDAL,Model,DALFactory(使用DALFactory創建實例)
DAL 引用 Model
Model 無引用
DALFactory 引用IDAL,通過讀取web.config里設置的程序集,加載類的實例,返回給BLL使用
SQLServerDAL 引用 Model和IDAL,DBUtility.被DALFactory加載的程序集,實現接口里的方法
在解決方案里建立項目間的引用步驟為:選中需要添加引用的項目→右鍵選擇"添加引用"→"項目",然后選中要引用的項目的名稱.點確定完成項目的引 用.
把各項目之間的引用關系建立好以后,一個完整的解決方案就算是拾建好基石了.接下來,就是寫代碼實現各項目的作用了.

 

另外參考:在VS.NET中,如何將一個asp.net項目的多個模塊編譯成不同的DLL?

問:
概況:
有一個基於ASP.NET的系統,系統由一個基礎框架和多個業務模塊組成,各業務模塊之間的耦合性不強——但每個業務模塊對基礎框架高度依賴。

需求:
希望能夠將基礎框架和各業務模塊單獨編譯成不同的DLL,部署時可靈活的根據客戶需求增刪業務模塊。
______________________________________________________________________________________________
答1:
建立一個新的解決方案,在解決方案上點擊右鍵
在其中建立新建項目
每個新的項目就是你的業務模塊,他們會編譯成單獨的DLL
在要引用不同的項目的dll時,可以使用點擊 引用->項目->選擇所要引用的項目
______________________________________________________________________________________________
答2:
在一個解決方案下面建立多個項目,每個項目對應你的模塊,每個項目輸出類型都是類庫
______________________________________________________________________________________________
答3:
在新建的項目為:其它項目--〉企業級模版項目--〉c#或vb分布式應用程序。

項目自動創建四層結構的項目。之后自己在每一層創建每個dll項目。

如果a模塊使用b模塊,就在a模塊的項目上添加引用,選擇項目-〉b項目。

以上就是簡單的多模塊引用。
______________________________________________________________________________________________
答4:
將基礎框架及各相對獨立的業務模塊分到不同的項目里。
如果有多個層次,可以使用企業級模板項目來分級,沒有多個層次的,把所有的項目都直接放在解決方案下好了。
______________________________________________________________________________________________
答5:
在添加新項目時,添加類庫項目,該項目編譯生成的就是你要的DLL文件。
在其他項目中引用生成的DDL就可以了。。
______________________________________________________________________________________________
答6:
不知道你有沒有邏輯程,
你可以單獨編譯cs文件,
然后共享在每個模塊.
______________________________________________________________________________________________
答7:
不在VS.NET中倒是可以.
______________________________________________________________________________________________
答8:
首先感謝大家的熱情答復!祝大家新年快樂!

如上面各位的回答,將模塊分布到項目里面,那我需要在各個業務模塊中共享基礎框架中的狀態信息,如獲取系統的運行狀態(保存在application中)、獲取用戶的登錄信息(保存在用戶session中)等,采取這種“引用項目生成的DLL”的方式,能夠實現嗎?

首先申明:我是.net新手。

就我的理解(還沒來得及試驗):每個asp.net項目都是一個web應用,如在vs.net中新建一個c#的asp.net項目,就會有自己的AssemblyInfo.cs, web.config, Global.asax等文件,這樣的話,要在各個項目與同一個基礎框架(也是一個asp.net的項目)之間共享應用的運行狀態,應該是行不通的!

不知道我的理解對不對?
______________________________________________________________________________________________
答9:
ding
______________________________________________________________________________________________
答10:
當然能滿足你的要求.
______________________________________________________________________________________________
答11:
模塊編譯后基本上就可以脫離項目了
______________________________________________________________________________________________
答12:
to Hanks(Hank)

你的理解是對的,
Session 不能在項目間傳遞的,建項目時,每個項目都會生成自己的web.config, global.asax, 但你可以把你的業務模塊編成不同的項目后,生成相應的.dll,
然后再在你的項目中引用這些.dll, 就可以引用相應的項目了:)

Happy Spring Festival to every one!
______________________________________________________________________________________________
答13:
建立的項目為“類庫”用來放你的邏輯層,再在WEB項目中引用,但項目之間不能互相引用,那就用某個項目去直接引用另外個項目生成后的DLL
______________________________________________________________________________________________
答14:
舉個例子,比如:

某系統A由5個基礎模塊和10個業務模塊組成,

其中假設有一個業務模塊Xxx,該模塊物理上由兩個dll和一些頁面(包括aspx, html, js等)組成。兩個dll分別是:
一個封裝業務邏輯的dll,假設為XxxModel.dll
一個用於封裝aspx頁面behind code的dll,假設為XxxView.dll

這個模塊需要與基礎模塊通訊,訪問基礎模塊中的系統狀態。


象這樣怎么做?

______________________________________________________________________________________________
答15:
UP
______________________________________________________________________________________________
答16:
TO
就我的理解(還沒來得及試驗):每個asp.net項目都是一個web應用,如在vs.net中新建一個c#的asp.net項目,就會有自己的AssemblyInfo.cs, web.config, Global.asax等文件,這樣的話,要在各個項目與同一個基礎框架(也是一個asp.net的項目)之間共享應用的運行狀態,應該是行不通的!

〉〉可行的辦法::
在不同項目間通用session等信息:
http://www.csdn.net/Develop/Read_Article.asp?Id=18546


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM