早上衣明志 在QQ群里說他的博客開源了,地址在 https://github.com/qihangnet/MZBlog,基於NancyFX和MongoDB開發的。博客內容需要使用 MarkDown 進行編寫。Nancy框架是ASP.NET之外用.NET開發Web App的一種選擇,而且也是一種很簡單的選擇。所以本文本着學習Nancy 框架的分析了下衣大哥的代碼,下圖是個腦圖:
1、MongoDB:數據存儲采用NoSQL MongoDB,采用官方的驅動 mongocsharpdriver。
2、核心庫的測試項目MZBlog.Core.Tests:項目采用xUnit.NET測試框架,xUnit.net創造者是Jim Newkirk和Brad Wilson從包括NUnit及其它單元測試框架的使用經驗中總結出來的一個新框架,相比於NUnit,xUnit.net和其他框架的比較可參考《xuint和其他的單元測試框架的比較》。另外FluentAssertions,非常棒的測試斷言。非常符合人的思維模式。
3、項目分層:項目采用DDD(領域模型)的典型層次,包括了表現層,應用層,領域層和基礎設施層,MZBlog.Core其實對應着基礎設施層,不過這里的並不是指領域模型中的基礎設施,更恰當的說應該是一些普通項目的核心層,封裝一些常用的工具和服務,例如緩存、MongoDB操作。
MZBlog.Core的Documents、ViewProjections、Commands 對應的是MongoDB的領域層,領域層進行細分,會出現一些專門對應的一些領域核心層,領域核心實體擴展層。
- 領域核心層:這個層專門用於進行對領域層的擴展:用於定義一些領域中常用模式的接口,屬於上層建築。如ICommandInvoker,IViewProjection等,
- 領域核心擴展層:這個層專門用於對領域層中的實體進行擴展,如ViewProjections、Commands 等。
MZBlog.Web是應用層和表現層,同時也是對Nancy框架的一個應用的示例。
4、Nancy框架:Nancy是一個不錯的輕量級開源.NET Web框架,他是asp.net框架之外的另一個web開發框架,他完全不依賴於System.Web.只為簡單的Web開發做最基礎的准備,以Nancy寫的Web應用,可以輕松部署在Linux上,而不必受服務器操作系統的限制,衣明志的博客 就是在Linux上跑的,Web服務器使用的Jexus。
- Bootstrapper,類似與ASP.Net項目里的Global.asax,定義了應用的生命周期,繼承了NancyBootstrapper類后可以重寫基類的許多方法,比如
ApplicationStartup
Security: Nancy的身份驗證組件——Nancy.Authentication.Forms,你可以到nuget上獲得。由於Nancy的運行機制跟ASP.NET幾乎沒有關聯,到可以移步到Forms authentication with nancyfx看看它是怎么實現的。
- Responses:Http響應,項目中有個RssResponse,封裝了博客的RSS功能。
- Modules:Nancy Web App的核心,繼承NancyModule這個基類,然后在構造里直接定義HTTP方法和路由即可,路由機制簡單輕量但不失強大,可以方便的通過正則表達式制定路由規則。和ASP.NET相比非常簡單吧,Nancy框架天生就是MVC結構,Modules類似於ASP.NET MVC的Controller。
- Modelbinding:類似於asp.net mvc的ModelBinding,具體參看https://github.com/NancyFx/Nancy/wiki/Model-binding,擔負起Modules和Views之間數據傳遞的橋梁。
- Views: Nancy支持Razor, Spark, dotLiquid等視圖引擎,開發人員可以根據自己的喜好,選用不同的視圖引擎。MZBlog用的是Razor視圖引擎,你的ASP.NET MVC的知識可以無縫嫁接。
- ErrorHandling:異常處理,可以根據不同的http狀態碼進行處理,具體可以參考 Consistent error handling with Nancy。
- TinyIoC:Nancy集成了TinyIoC,TinyIoC是一個跨各種手機平台的輕量級開源Ioc框架(TinyIoC),該框架非常小,只有一個cs文件就能使用,使用后感覺效果還不錯,基本容器功能都支持了。git開源項目地址:https://github.com/grumpydev/TinyIoC
5、Bootstrap是Twitter出名的一個優秀的web前端框架,它讓不太懂設計的web程序員們也能做出比較好看的UI來。Bootstrap3默認采用時下流行的扁平化設計,會讓你的web顯得很時尚.
6、Markdown 是一種輕量級標記語言,創始人為約翰·格魯伯(John Gruber)和亞倫·斯沃茨(Aaron Swartz)。它允許人們“使用易讀易寫的純文本格式編寫文檔,然后轉換成有效的XHTML(或者HTML)文檔”。這種語言吸收了很多在電子郵件中已有的純文本標記的特性。Markdown 語法可參考 http://wowubuntu.com/markdown/
xUnit.net runner for Visual Studio 2012 and 2013
Lift your Petticoats with Nancy....