經過大半年的斷斷續續的努力,今天,我發布了Apworks的一個新版本:2.5.4878.35266。Apworks是我從2009年開始一直開發並維護的一個面向領域驅動的基於.NET的企業級應用程序開發框架,通過使用這個框架,開發者可以快速地開發出面向領域驅動的、專業的企業級應用程序。Apworks同時支持經典分層架構以及CQRS架構(基於CQRS架構的案例程序請參考:Tiny Library CQRS:http://tlibcqrs.codeplex.com)。為了更透明地向讀者介紹面向領域驅動的經典分層架構,我也在社區中開發過一個案例程序:Byteart Retail(https://github.com/daxnet/ByteartRetail)。事實上,Byteart Retail中的很多部分都可以使用Apworks框架實現(比如倉儲、事件、服務等等),在將這些實現部分用Apworks替換以后,你將發現,開發一個應用程序竟是如此簡單。
Apworks框架所提供的功能
Apworks從框架級別提供了:
- 實體、值對象、服務的基本框架元素
- 完善的倉儲架構以及多樣化的倉儲實現(目前支持NHibernate、EntityFramework和MongoDB)
- 簡單易用的事件總線(目前支持Direct Bus、Event Aggregator Bus和MSMQ)
- 靈活的領域事件產生和派發機制
- AOP攔截和異常處理機制
- 多種數據序列化機制
- 規約架構
- 事務協調器架構(目前支持DistributedTransactionCoordinator和SuppressedTransactionCoordinator)
- 事件溯源(Event Sourcing)
- 對象快照(Snapshot)
- 靈活多樣的快照產生機制,通過框架可以自定義快照產生策略(目前支持EventNumberSnapshotProvider和SuppressedSnapshotProvider)
- 靈活多樣的領域倉儲的框架及實現(目前支持EventSourcedDomainRepository、RegularDomainRepository、RegularEventPublisherDomainRepository以及SnapshotDomainRepository)
- 靈活多樣的事件存儲(Event Store):目前支持基於SQL Server的Event Store以及MySQL的Event Store。所支持的后台數據庫類型能被動態擴展
- 靈活多樣的IoC容器整合方案:目前僅整合了Microsoft Unity,但框架本身支持擴展其它的IoC解決方案
- 多樣化的框架配置方式:目前支持基於app/web.config的配置方式、直接寫代碼進行配置,以及基於流暢接口(Fluent Interface)的配置方式
新版本更新內容
歷代版本的功能特性與更新請參見:http://apworks.org/?page_id=424。
這個新版本主要有以下幾個方面的更新:
- 基於MongoDB的倉儲實現(Apworks.Repositories.MongoDB.dll)
- 實現了經典分層架構下的領域事件產生和派發框架(Apworks.dll)
- 基於事件聚合器(Event Aggregator)的消息總線(Apworks.Bus.EventAggregator.dll)
- 優化了NHibernate的倉儲實現(Apworks.Repositories.NHibernate.dll)
- 提供了框架配置的流暢接口(Fluent Interface)的支持(Apworks.dll)
- 實現了事務協調器(Apworks.dll)
- 引入了PagedResult<T>泛型類型,用以接收由倉儲返回的分頁信息。基於Entity Framework和NHibernate的倉儲實現目前能夠在一次數據庫交互中返回分頁數據,提高了分頁處理的性能;MongoDB的倉儲雖然也支持分頁,但實現上效率要略低
- 為Microsoft Patterns & Practices Unity提供了更為穩健的基於WCF的Lifetime Manager,感謝Andrew Oakley在Unity擴展上所做的貢獻,請參見:http://blogs.msdn.com/b/atoakley/archive/2010/12/29/unity-lifetime-managers-and-wcf.aspx
- IBus接口現已改為非泛型接口;消息的泛型類型被約束在IBus接口的成員方法上,而不是在IBus接口上,這樣更符合實際需求
- 所有的外部組件依賴引用已經更新到最新版本
安裝包下載地址
請單擊http://apworks.org/wp-content/uploads/fx/setup_v2_5_4878_35266.zip直接下載安裝包。完成下載並解壓后,運行Apworks.Setup.exe執行安裝。本安裝程序由WiX產生。
使用NuGet安裝
可以根據需要,在Visual Studio中使用NuGet Package Manager進行安裝。在需要引用Apworks的項目上單擊右鍵,選擇Manage NuGet Packages選項,將出現Manage NuGet Packages對話框:
在Search Online文本框中,輸入Apworks作為查找關鍵字,將看到列表中會列出所有Apworks可用的組件:
此時可以根據需要,單擊Install按鈕進行安裝。
直接編譯源代碼程序
可以到Apworks的代碼庫主頁https://github.com/daxnet/Apworks查看最新的簽入信息,如果需要直接編譯源代碼,請以以下步驟進行:
首先,使用命令 git clone https://github.com/daxnet/Apworks 將源代碼克隆到本地,然后,根據自己的開發平台進行編譯:
在Windows中編譯Apworks
在Windows下,啟動Visual Studio Command Prompt(命令提示符),然后進入Apworks目錄,使用 build Debug 命令編譯Apworks的Debug版本,使用 build Release 命令編譯Apworks的Release版本。
在Linux、Unix、Mac OS X中編譯Apworks
在非Windows平台下,首先確保Mono 2.10.8(或以上版本)正確安裝,然后進入Apworks目錄,使用 sh build.sh Debug 命令編譯Apworks的Debug版本,使用 sh build.sh Release 命令編譯Apworks的Release版本。注意:在編譯前,bash程序會首先自動下載依賴組件,因此請確保機器有網絡連接。
下一版本功能計划
計划在下一版本的Apworks中引入以下功能:
- 輕量級Enterprise Service Bus,用以替代目前的IBus實現
- Visual Studio項目模板
- 領域模型設計器(DSL)
- 引入Castle Windsor的IoC容器支持
- 重構/優化對CQRS架構的支持(暫定)
- LMAX架構的支持(暫定,關於LMAX架構,請參考:http://martinfowler.com/articles/lmax.html)
如何使用?
我將在近期寫一些文章來介紹如何在實際項目中使用Apworks開發基於經典架構的企業級應用程序,敬請期待!