OSharp是什么?
OSharp是個快速開發框架,但不是一個大而全的包羅萬象的框架,嚴格的說,OSharp中什么都沒有實現。與其他大而全的框架最大的不同點,就是OSharp只做抽象封裝,不做實現。依賴注入、ORM、對象映射、日志、緩存等等功能,都只定義了一套最基礎最通用的抽象封裝,提供了一套統一的API、約定與規則,並定義了部分執行流程,主要是讓項目在一定的規范下進行開發。所有的功能實現端,都是通過現有的成熟的第三方組件來實現的,除了EntityFramework之外,所有的第三方實現都可以輕松的替換成另一種第三方實現,OSharp框架正是要起隔離作用,保證這種變更不會對業務代碼造成影響,使用統一的API來進行業務實現,解除與第三方實現的耦合,保持業務代碼的規范與穩定。
本文已同步到系列目錄:OSharp快速開發框架解說系列
前言
經過一段時間的努力,OSharp項目又有了全新的面貌,目前版本號已經更新到 3.3.2(github.com、nuget),與之前3.0的版本又有了很大的差異。
有些項目被拆分了,有些項目又被合並了,又新增了不少項目,有人就要問了,為什么不向前兼容呢?
這個是比較無奈的事,有些是因為之前設計考慮不周,設計有缺陷,也有些是因為后面又有了更好的想法,也就不斷的改進了,至少總是不斷向好的方向發展的。並且現在框架處於開發階段,不能保持穩定,不斷調整是在所難免的。
重新開源
經過這段時間的發展,OSharp項目已經比較算比較成熟了,能看得過眼,算是拿得出手了,現在也重新提交到了github開源平台中,開源地址依然為:
之前的舊版本,已經更名為osharp.v2,舊版本的地址為:https://github.com/i66soft/osharp.v2,請注意區分。
歡迎大家關注(Watch)、支持(Star)、參與(Fork)《OSharp快速開發框架》開源項目的發展。
3.3版本新特性及項目組成
新特性
下面我們還是先來看看,截止到目前為止,當前版本的一些新特性吧。
- 自定義了一個Web.Config的配置節點,用於配置框架中一些必要的開關,初始化環境等。當然,基於“約定勝於配置”的傳統,這些配置不是必須的,如果不使用配置節點,系統也能按一套默認的設置來正常運行。
- 從框架級別對框架初始化進行了抽象,框架定義了初始化流程,具體的第三方組件,僅作為具體的服務實現存在。
- 參考 ASP.NET 5 的依賴注入設計,從框架級別提供了依賴注入的抽象封裝,可以極其方便的使用第三方IoC組件實現依賴注入功能。
- 參考 ASP.NET 5 的“一切皆服務”的設計思想,配合第2點對依賴注入的支持,很容易構建一套可組裝的松耦合的架構,一切變化點的實現方案均可很容易進行替換。
- 基於 ASP.NET Identity 的權限系統設計,一切權限均可配置,可以很輕松實現角色-功能、用戶-功能、角色-數據、用戶-數據等細粒度的功能權限與數據權限控制。
項目組成
我們來看看這個版本相對於之前的版本,項目結構有何變化,下面這三張圖片的對比,可以一目了然的展現OSharp的發展歷程:
OSharp 2.0
OSharp2.0版本只是簡單的三層架構,主要是實現了EntityFramework的動態上下文構建的功能,MVC/WebApi/SignalR等平台的相關代碼,僅是作為輔助工具組件的形式存在,架構上比較簡單。
OSharp 3.0
OSharp3.0對增加了一個SiteBase項目,系統初始化也初具雛形,但仍然極其簡單,依賴注入功能的實現仍然強依賴於Autofac,沒有進行解耦。對MVC/WebApi等平台的整合有了一些封裝,但平台間沒有進行分離,而是雜合在一個類庫中,相互污染程度比較大。
OSharp 3.3
OSharp3.3由依賴注入的抽象封裝開始,以MVC6的“一切皆服務”的架構思想,對整個架構進行了大改,並嚴格隔離了MVC/WebApi/SignalR等平台,使之互不影響,並可單獨構建運行環境,同時加入了權限認證的支持。
乍一看,似乎 OSharp 3.3 版本的類庫數量增加了很多個,其實也沒增加多少的,只是把原來整合在一起的構架按 Mvc/WebApi/SignalR 等平台進行了拆分,拆分了之后,能更靈活的對需要的功能進行引用,不必引用使用不到的功能。
3.3版本類庫功能及依賴說明
工具類庫
- OSharp.Utility
- 作用:工具類組件,對常用工具類輔助操作進行封裝
- 依賴項:Json.NET
框架核心類庫
- OSharp.Core
- 作用:框架核心組件,為框架定義配置節點,依賴注入,數據訪問,日志,緩存,框架初始化,基礎數據等功能的基礎類、核心接口等
- 依賴項:OSharp.Utility
- OSharp.Core.Data.Entity:
- 作用:數據訪問組件,封裝基於EntityFramework的數據訪問功能的實現
- 依賴項:OSharp.Core,EntityFramework,EntityFramework.Extended,AutoMapper
- OSharp.Core.Data.Entity.MySql
- 作用:MySql數據訪問組件,對數據訪問組件提供基於EntityFramework的數據訪問功能的MySql數據庫的支持
- 依賴項:OSharp.Core.Data.Entity,MySql.Data.Entity
技術平台類庫
MVC平台
- OSharp.Web.Mvc
- 作用:ASP.NET MVC 組件,封裝MVC通用操作及MVC平台初始化實現
- 依賴項:OSharp.Core.Data.Entity,OWin,ASP.NET MVC5
- OSharp.Autofac.Mvc
- 作用:ASP.NET MVC 的Autofac依賴注入組件,基於Autofac對框架的MVC平台的依賴注入功能進行實現
- 依賴項:OSharp.Core,ASP.NET MVC5,Autofac.Integration.Mvc
WebApi平台
- OSharp.Web.WebApi
- 作用:ASP.NET WebApi 組件,封裝WebApi通用操作及WebApi平台初始化實現
- 依賴項:OSharp.Core.Data.Entity,OWin,ASP.NET WebApi5
- OSharp.Autofac.WebApi
- 作用:ASP.NET WebApi 的Autofac依賴注入組件,基於Autofac對框架的WebApi平台的依賴注入功能進行實現
- 依賴項:OSharp.Core,ASP.NET WebApi5,Autofac.Integration.WebApi
SignalR平台
- OSharp.Web.SignalR
- 作用:ASP.NET SignalR 組件,封裝SignalR通用操作及SignalR平台初始化實現
- 依賴項:OSharp.Core.Data.Entity,OWin,ASP.NET SignalR2
- OSharp.Autofac.SignalR
- 作用:ASP.NET SignalR 的Autofac依賴注入組件,基於Autofac對框架的SignalR平台的依賴注入功能進行實現
- 依賴項:OSharp.Core,ASP.NET SignalR2,Autofac.Integration.SignalR
本地程序平台
- OSharp.App.Local
- 作用:本地程序組件,封裝Winform/WPF/Services/Console等形式的本地應用程序提供框架初始化功能
- 依賴項:OSharp.Core,Autofac
- OSharp.Web.Client
- 作用:本地程序網絡組件:封裝Winform/WPF/Services/Console等形式的本地應用程序提供WebApi/SignalR等網絡功能
- 依賴項:OSharp.Utility,ASP.NET WebApi4 Client,ASP.NET SignalR Client
輔助類庫(可選)
- OSharp.Core.Permissions
- 作用:用戶認證權限組件:基於 ASP.NET Identity 提供用戶認證與功能權限、數據權限的驗證功能的基礎實現
- 依賴項:OSharp.Core.Data.Entity,ASP.NET Identity Core
- OSharp.Logging.Log4Net
- 作用:log4net日志組件:基於log4net對日志記錄功能進行實現
- 依賴項: OSharp.Core,log4net
開源說明
github.com
OSharp項目已在github.com上開源,地址為:https://github.com/i66soft/osharp,歡迎閱讀代碼,歡迎 Watch(關注),歡迎 Star(推薦),如果您認同 OSharp 項目的設計思想,歡迎參與 OSharp 項目的開發。
在Visual Studio 2013中,可直接獲取 OSharp 的最新源代碼,獲取方式如下,地址為:https://github.com/i66soft/osharp.git
開源項目參與方式
很多童鞋想參與開源項目,為項目做貢獻,但又不知道如何做,這里我簡單說下參與OSharp的步驟吧:
- 在 https://github.com/i66soft/osharp 右上角 Fork 一下項目源碼,在你的賬戶下會有一份代碼的副本
- 使用VisualStudio Clone 你賬戶下的代碼到本地,更改代碼,再提交,就完成代碼的更改了
- 如果覺得有並入 i66soft 主干的價值,可以向主干提交 pull request申請,如果我審核通過,就可以合並到主干了,這就形成了一次開源代碼的貢獻了
- 如果我沒有接受合並,你也可以在你的賬戶上按你的風格去發展osharp
- 我也會經常瀏覽各個Fork版本對項目的更改,如果覺得有價值,也會主動合並到主干代碼中,也能形成一次對開源的貢獻
- 為保證提交的質量,也便於對代碼的合並,每次更改與提交應該只做一件事,只提交必要的更改
nuget
OSharp的相關類庫已經發布到nuget上,歡迎試用,直接在nuget上搜索 “osharp” 關鍵字即可找到
系列導航
本文已同步到系列目錄:OSharp快速開發框架解說系列