Microsoft NLayerApp案例理論與實踐 - 項目簡介與環境搭建
項目簡介
Microsoft – Spain團隊有一個很不錯的面向領域多層分布式項目案例:Microsoft – Domain Oriented N-Layered .NET 4.0 App Sample(在本系列文章中,我使用NLayerApp作為該項目的名稱進行介紹),在codeplex上的地址是:http://microsoftnlayerapp.codeplex.com/。
它是學習領域驅動設計(DDD)的一個非常不錯的案例項目。該項目采用的是經典的DDD架構,而不是CQRS架構,但我覺得整個案例做的非常不錯,基本上包含了基于DDD的架構實踐的各個方面。因此,應不少社區朋友的要求,我打算花一部分精力來寫一個介紹該項目理論與實踐的系列文章。這部分系列文章將分為兩個部分:
- 原理部分:這部分介紹Microsoft NLayerApp的一些理論依據,包括架構設計原則、分層架構、DDD、Distributed DDD、面向對象分析與設計等。事實上,microsoftnlayerapp.codeplex.com站點上已經有一些文檔對這部分內容作了介紹,因此,原理部分的內容我將基本上是對這些英文文檔進行翻譯整理,然后再添加一些自己的注釋,這樣做的好處是,能夠就整個企業級項目的開發與設計為讀者提供一套相對系統全面的學習材料。NLayerApp的官方站點本身也在做西班牙語到英語的翻譯工作,所以這部分英文文檔也并不全面,我會在新英文版文檔發布后,在此相應地添加所缺失的部分
- 實踐部分:這部分將對整個NLayerApp Solution的結構、各個邏輯層、各種用到的技術進行剖析和介紹。與原理部分不同,此部分內容更關注技術的具體實現細節,而不是去討論什么是面向對象,什么是分層架構等基礎性問題
注意:Microsoft – Spain團隊一直以Domain Oriented一詞來形容這個項目,而不是用Domain Driven Design,原因是,Domain Driven Design包含的內容,不僅僅是某一種架構技術,它還包含軟件項目的開發方式、開發團隊的協作管理、用于領域專家和軟件人員之間的通用語言的創建等內容。然而,在整個NLayerApp項目中,并沒有用到DDD的所有這些內容,項目的范圍僅限于邏輯/技術層面的架構設計。
NLayerApp項目環境搭建
在開始這個系列文章之前,先讓我們把NLayerApp的項目環境搭建好。在搭建環境之前,請檢查你的電腦是否滿足下面的先決條件:
- Visual Studio 2010 RTM 和 .NET 4.0 RTM
- Expression Blend 4(好像微軟公共官方網站沒有直接的下載地址,只有MSDN訂閱用戶才能下載到完整版本。不過使用Expression Blend SDK for Silverlight 4應該也是可以的。下載地址是:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d197f51a-de07-4edf-9cba-1f1b4a22110d)
- SQL Server 2008 R2 Express/Standard/Enterprise(本系列文章使用的是Express版本)
- Unity Application Block 2.0 – 5/5/2010發布(下載地址:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=2D24F179-E0A6-49D7-89C4-5B67D939F91Bdisplaylang=en)
- Pex Moles 0.94.51023.0, Visual Studio 2010 Power Tools, 10/29/2010發布(地址:http://research.microsoft.com/en-us/projects/pex/downloads.aspx#PexMSDN)
- WPF Toolkit:http://wpf.codeplex.com/releases/view/40535
- Silverlight 4 Tools for Visual Studio 2010: http://www.microsoft.com/downloads/en/details.aspx?displaylang=enFamilyID=b3deb194-ca86-4fb6-a716-b67c2604a139
- Silverlight 4.0 Toolkit (4/15/2010): http://silverlight.codeplex.com/releases/view/43528
- Windows Server AppFabric(可選,本系列文章用不到):http://www.microsoft.com/downloads/en/details.aspx?FamilyID=467e5aa5-c25b-4c80-a6d2-9f8fb0f337d2
- Windows Azure SDK Azure Tools for VS2010, Nov. 2010(可選,本系列文章用不到):http://www.microsoft.com/downloads/en/details.aspx?FamilyID=7a1089b6-4050-4307-86c4-9dadaa5ed018
請按下面的步驟安裝和配置NLayerApp:
- 完成上述開發包的安裝和配置(最后兩項可以不安裝,本系列文章沒有用Windows Server AppFabric和Azure的功能)
- 下載NLayerApp v1.0的壓縮包,地址是:http://microsoftnlayerapp.codeplex.com/releases/view/56660,選擇V1.0 - N-Layer DDD Sample App NET4.0,本系列文章將使用這個版本進行介紹
- 解壓縮下載完的zip包,包含三個文件夾:CORE、CORE-APPFABRIC和CORE-AZURE。本系列文章沒使用AppFabric和Azure,所以,直接進入CORE目錄
- 暫時直接無視Tests,所以,雙擊打開NLayerAppWithoutTesting.sln解決方案
- 這個解決方案沒有將Infrastructure.Data.MainModule.Mock項目添加進來,這會導致Infrastructure.CrossCutting.IoC項目無法編譯通過。在Visual Studio中,將解決方案展開到1.5.1 Data節點,在該節點上右鍵單擊,選擇Add | Existing Project,然后在CORE的Infrastructure.Data.MainModule.Mock目錄下選擇Infrastructure.Data.MainModule.Mock.csproj項目文件,并單擊Open按鈕
- 在Server Explorer中,右鍵單擊Data Connections節點,選擇Create New SQL Server Database選項
- 在打開的Create New SQL Server Database對話框中,填入你的Server地址,然后輸入數據庫名稱,再單擊OK按鈕。本案例使用SQL Express(with Windows Authentication),使用默認的數據庫名稱NLayerApp
你完全可以選擇自己定義的SQL Server和數據庫名稱,如果你是使用自己定義的SQL Server和數據庫的話,請同時修改2 – Database節點下NLayerAppDatabase項目的屬性:右鍵單擊NLayerAppDatabase項目,選擇Properties,在Property頁的Deploy選項卡中修改相關參數:
- 右鍵單擊NLayerAppDatabase項目,然后單擊Deploy,這將創建數據庫Schema
- 編譯整個解決方案
- 在1.2 – Distributed Services節點下,找到DistributedServices.Deployment項目,右鍵單擊項目下的MainModule.svc文件,選擇View in Browser,以啟動WCF服務
- 啟動用戶界面。NLayerApp v1.0提供以下幾種用戶界面:基于RIA的Silverlight 4.0 Client,基于Web的ASP.NET MVC Client,基于Windows的WPF Client
基于RIA的Silverlight 4.0 Client
右鍵單擊Silverlight.Client.Web項目下的Silverlight.Client.Web.html文件,選擇View in Browser,則啟動基于RIA的Silverlight 4.0 Client
基于Web的ASP.NET MVC Client
將MVC.Client項目設置為啟動項目并直接運行,可以啟動基于Web的ASP.NET MVC Client
可能是我瀏覽器版本低的緣故,得到的ASP.NET MVC頁面布局有點亂
基于Windows的WPF Client
將WPF.Client項目設置為啟動項目并直接運行,可以啟動基于Windows的WPF Client
本文介紹了NLayerApp項目的基本情況和環境搭建。從下一講開始,我們將進入架構設計的理論學習部分,包括:分層架構、SOLID與設計原則、面向領域驅動設計(DDD)的架構趨勢以及分布式DDD(Distributed DDD,DDDD)。這部分內容將主要來自于NLayerApp官網(microsoftnlayerapp.codeplex.com)提供的英文文檔,daxnet將在此做翻譯、整理與注解。