系列文章導航
- 【開源】OSharp框架解說系列(1):總體設計
- 【開源】OSharp框架解說系列(2.1):EasyUI的后台界面搭建及極致重構
- 【開源】OSharp框架解說系列(2.2):EasyUI復雜布局及數據操作
- 【開源】OSharp框架解說系列(3):擴展方法
- 【開源】OSharp框架解說系列(4):架構分層及IoC
- 【開源】OSharp框架解說系列(5.1):EntityFramework數據層設計
- 【開源】OSharp框架解說系列(5.2):EntityFramework數據層實現
- 【開源】OSharp框架解說系列(6.1):日志系統設計
- 【開源】OSharp3.0框架解說系列:新版本說明及新功能規划預覽
- 【開源】OSharp3.0框架解說系列(6.2):操作日志與數據日志
- 【開源】OSharp3.3框架解說系列:重新開源及3.3版本新特性
- 【開源】OSharp3.3框架解說系列(7.1):初始化流程概述
- 【開源】OSharp3.3框架解說系列:開發計划與進度
重要提示:
- 隨着新的 .net core 平台的崛起,傳統的.net framework 已經落沒,osharp 的 .net fx 版本將進入維護階段
- osharp的core版本 osharpns 已經進入實用階段,歡迎關注:https://github.com/i66soft/osharp-ns20
前言
OSharp是什么?
OSharp是個快速開發框架,但不是一個大而全的包羅萬象的框架,嚴格的說,OSharp中什么都沒有實現。與其他大而全的框架最大的不同點,就是OSharp只做抽象封裝,不做實現。依賴注入、ORM、對象映射、日志、緩存等等功能,都只定義了一套最基礎最通用的抽象封裝,提供了一套統一的API、約定與規則,並定義了部分執行流程,主要是讓項目在一定的規范下進行開發。所有的功能實現端,都是通過現有的成熟的第三方組件來實現的,除了EntityFramework之外,所有的第三方實現都可以輕松的替換成另一種第三方實現,OSharp框架正是要起隔離作用,保證這種變更不會對業務代碼造成影響,使用統一的API來進行業務實現,解除與第三方實現的耦合,保持業務代碼的規范與穩定。
前一個系列講的主要是我對架構設計的理解以及怎樣用好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 進行代碼優化。
溫馨提示:本系列非入門級教程,對於基礎知識不會做過多的講解,讀者最好對系統架構,IoC依賴注入,面向接口編程,EntityFramework數據存儲等方面的知識有較好的理解。
架構圖
架構說明
使用技術(庫)說明
- 技術平台:.NET Framework 4.5
- 技術框架:ASP.NET MVC5 + WebAPI + SignalR
- 數據存儲: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)的方式來組織實現層的代碼
依賴項:1. OSharp.Utility,2. OSharp.Web,3. OSharp.Plugin,4. OSharp.Core,5. ASP.NET MVC
開源說明
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” 關鍵字即可找到