OSharp框架解說系列(1):總體設計
〇、前言
哈,距離前一個系列《MVC實用構架設計》的爛尾篇(2013年9月1日)已經跨了兩個年頭了,今天是2015年1月9日,日期已經相映,讓我們開啟新的航程吧。
前一個系列講的主要是我對架構設計的理解以及怎樣用好EntityFramework的一些想法,在技術細節上並沒有太多的考究。不幸的是,不少同學把這個架構當作框架來用了,里邊留的很多坑,坑苦了很多人,真是誤人子弟,深表愧疚。於是重新整理代碼,整理思路,鼓搗出了這個我們將要詳解的開源框架:OSharp。這次,我們真的深入地說框架了,而不是架構那樣只是蜻蜓點水。
關於OSharp:OSharp是我在“MVC EF 技術交流群”(5008599)發起的一個群內開源項目。項目名字來源也挺有意思,在頭腦風暴起名時誰說的一句“O-Shit”,后來結合CSharp,演化成了OSharp。當時40多個群成員集資購買阿里雲服務器作為TFS的服務器,本想以TFS為團隊合作平台進行合力開發的,但后面由於組織不力,合作得並不是很理想,基本上不了了之。不過大家的熱情還是深深的激勵着我堅持按原來的想法把底層基本做成型了。於是便有了現在這個開源項目,一個架構上,兼容上來說很初級的框架。
OSharp是一個依賴於EntityFramework,專注於業務數據模型與EntityFramework解耦的適用於中小型項目開發的(插件式)框架。OSharp將支持基於OSGi.NET的插件式開發,但我們還是會從非插件式講起,詳細了解OSharp開發框架的方方面面。在本系列中,將會講解到不少非常實用的技術與編碼技巧,歡迎關注。
本系列使用的開發環境為:Windows7 SP1、Visual Studio 2013、Sql Server 2012,.NET Framework 4.5,github.com 代碼托管,並使用 Resharper 8.0.2 進行代碼優化。
一、目錄
〇、前言
一、目錄
二、架構圖
三、架構說明
四、開源說明
二、架構圖
三、架構說明
(一)使用技術(庫)說明
- 技術框架:.NET Framework 4.5
- 數據存儲:EntityFramework 6
- 數據序列化:使用JSON.NET作為JSON序列化的主要工具
- 數據映射:AutoMapper,主要用於數據傳輸對象DTO與數據實體模型Model之間的相互轉化,免於繁雜的對象屬性賦值
- IoC組件:Autofac,定義了一個專用於處理映射的空接口IDependency,用於處理IoC接口與實現的批量映射,避免Autofac與各個層次耦合
- 日志記錄:定義通用日志記錄接口與基礎API,日志輸出方式可以使用現成的任意日志組件(如log4net)
- 緩存處理:未定
- 。。。
(二)項目工程詳解
- 通用工具組件:OSharp.Utility
說明:分類封裝通用的與技術無關的輔助工具類功能
依賴項:JSON.NET - Web組件:OSharp.Web
說明:封裝Web相關的Webform,MVC,WebApi,SignalR等Web技術的輔助功能
依賴項:1.OSharp.Utility,2.ASP.NET MVC,3.ASP.NET WebApi,4.SignalR,5.JSON.NET - OSharp框架核心組件:OSharp.Core
說明:1.定義OSharp框架的核心API,是整個框架運行的骨架
2.該骨架提供數據存儲,緩存,權限等模塊的基礎接口或基類,不提供具體實現
3.業務層依賴於此層的接口與基類進行業務操作,而不依賴於具體的實現
4.日志API為了使用方便,已經遷移到OSharp.Utility
依賴項:OSharp.Utility - EntityFramework數據存儲組件:OSharp.Core.Data.Entity
說明:1.提供OSharp.Core中定義的數據存儲功能的EntityFramework的實現方案
2.本框架的數據組件將不做各個ORM的兼容性處理,為充分發揮EntityFramework的性能優化,本框架將強依賴於EntityFramework
依賴項:1.OSharp.Utility,2.OSharp.Core,3.EntityFramework,4.AutoMapper - 普通(非插件式)示例工程:OSharp.Demo.Web
說明:1.為盡量簡化項目結構,本工程不采用類庫划分層次,而采用文件夾分層方式
2.各文件夾說明如下:
2.1 Models:用於EntityFramework數據存儲操作的數據實體模型,與數據庫中的表對應
2.2 EntityConfigurations:數據實體與數據庫的映射類,實體將依靠這些映射類加載到與業務解耦的上下文中,並使用 Fluent API 配置數據映射的細節
2.3 Dtos:DTO是業務層的輸入信息,Controller與業務層之間通信數據的承載體,用戶的交互數據將以“DTO+簡單類型數據”的形式傳遞到業務層中進行處理,DTO與Model之間的映射使用AutoMapper來進行,以減少繁雜的屬性賦值操作和增加代碼的可維護性
2.4 Services:業務契約,業務實現將以模塊為划分,而不是以實體為划分。以模塊為划分單元,可增強業務操作的內聚性,但為了方便處理各個實體的業務,推薦使用 局部類(partial)的方式來組織實現層的代碼
四、開源說明
(一)github.com
OSharp項目已在github.com上開源,地址為:https://github.com/i66soft/osharp,歡迎閱讀代碼,歡迎 Fork,如果您認同 OSharp 項目的思想,歡迎參與 OSharp 項目的開發。
在Visual Studio 2013中,可直接獲取 OSharp 的最新源代碼,獲取方式如下,地址為:https://github.com/i66soft/osharp.git
(二)nuget
OSharp的相關類庫已經發布到nuget上,歡迎試用,直接在nuget上搜索 “osharp” 關鍵字即可找到
系列導航
- 【開源】OSharp框架解說系列(1):總體設計