OSharp是什么?
OSharp是個快速開發框架,但不是一個大而全的包羅萬象的框架,嚴格的說,OSharp中什么都沒有實現。與其他大而全的框架最大的不同點,就是OSharp只做抽象封裝,不做實現。依賴注入、ORM、對象映射、日志、緩存等等功能,都只定義了一套最基礎最通用的抽象封裝,提供了一套統一的API、約定與規則,並定義了部分執行流程,主要是讓項目在一定的規范下進行開發。所有的功能實現端,都是通過現有的成熟的第三方組件來實現的,除了EntityFramework之外,所有的第三方實現都可以輕松的替換成另一種第三方實現,OSharp框架正是要起隔離作用,保證這種變更不會對業務代碼造成影響,使用統一的API來進行業務實現,解除與第三方實現的耦合,保持業務代碼的規范與穩定。
本文已同步到系列目錄:OSharp快速開發框架解說系列
OSharp3.0介紹
經過最近一段時間的努力,OSharp3.0新增了不少功能,如框架初始化流程,多數據庫多上下文的支持,分類日志記錄等,包含功能權限與數據權限的權限系統正在設計當中,基於實體配置的緩存系統,在計划當中。
與OSharp2.0對比
與OSharp2.0對比,OSharp3.0做了一些改變,除了OSharp.Utility,OSharp.Web.Client這兩個通用的類庫外,OSharp3.0的其他類庫,都去除了對.net 4.0的支持,只支持.net 4.5及以上的.net環境。
由nuget上的項目圖,可以看出兩個版本的變化:
osharp2.0的項目圖:
OSharp3.0的項目圖:
下面,我們再來梳理一下各個類庫的作用:
- OSharp.Utility:
- 作用:工具類組件,對常用工具類輔助操作進行封裝
- 依賴項:Json.NET
- OSharp.Web:
- 作用:Web工具類組件,封裝Web相關的MVC,WebAPI,SignalR的通用操作
- 依賴項:OSharp.Utility,MVC5,WebAPI5,SignalR2
- OSharp.Web.Client:
- 作用:Web客戶端組件,封裝Web客戶端相關的WebAPI,SignalR的桌面客戶端功能
- 依賴項:OSharp.Utility,WebAPI4 Client,SignalR2 Client
- OSharp.Core:
- 作用:框架核心組件,為框架定義配置節點,日志,數據訪問,緩存,框架初始化等功能的基礎類,核心接口等
- 依賴項:OSharp.Utility
- OSharp.Core.Data.Entity:
- 作用:數據訪問組件,封裝基於EntityFramework的數據訪問功能的實現
- 依賴項:OSharp.Core,EntityFramework,AutoMapper
- OSharp.Core.Data.Entity.MySql:
- 作用:MySql數據訪問組件,對數據訪問組件提供基於EntityFramework的數據訪問功能的MySql數據庫的支持
- 依賴項:OSharp.Core.Data.Entity,MySql.Data.Entity
- OSharp.SiteBase:
- 作用:站點基礎,提供站點基礎功能的定義及框架初始化的實現
- 依賴項:OSharp.Web,OSharp.Core.Data.Entity,Autofac,log4net
- OSharp.Framework:
- 作用:框架nuget安裝引導,沒有實際類庫
- 依賴項:OSharp.SiteBase,OSharp.Web
- OSharp.Sample.Simple:
- 作用:OSharp開發框架的簡單示例,用於OSharp框架的初體驗
- 依賴項:OSharp.Framework及一些前端框架
OSharp3.0新功能規划及簡介
對於各個新增功能,這里只是簡單的做一下介紹,詳細的設計思路及實現,后面的文章再詳細說明。
分類日志記錄
在《【開源】OSharp框架解說系列(6.1):日志系統設計》中,我們已經設計並實現了一個可擴展的日志系統,只要定義好輸出端的Adapter,就可以以任意形式輸出日志信息。
在日志開發中,有些日志記錄需求是常規需要的,比如操作日志,數據變更日志,系統異常日志等,我們希望把這些常規需求都集成到OSharp框架當中。有了內置的支持,在做開發的時候,只需要很簡單的配置,就可以實現相關需求。
例如,操作日志的實現,如下圖所示:
在后台管理中,管理員通過簡單的配置,就可以控制每個功能點是否開啟操作日志與數據日志的記錄。
多數據庫多上下文支持
在構建較復雜的系統的時候,有時候我們需要針對不同的子系統或模塊進行分庫,把原先集中在一個數據庫中的數據,根據模塊的不同,拆分到不同的數據庫中。
例如,上面的操作日志與數據日志,並不是系統的業務數據,就可以不記錄到業務數據庫中,而是單獨記錄到日志數據庫中,能有效的減輕日志數據量寵大給業務數據庫帶來的壓力。
OSharp3.0的數據訪問層,通過對數據上下文(DbContextBase)、數據初始化策略(DbContext的抽象,可以很輕松的按需要對實體類進行分組,初始化到不同的上下文中。
功能權限與數據權限系統
在OSharp的權限系統中,在系統初始化的時候,將收集系統的所有功能信息與所有數據實體信息,作為記錄存儲到數據庫中。
權限系統將可以根據上面收到的功能信息與數據實體信息,針對不同的角色,對功能權限與數據權限進行點對點的權限控制。
- 對於功能權限,每個角色針對每個功能,都可以配置“繼承、允許、拒絕”三種狀態的權限類型
- 對於數據權限,每個角色針對每個實體(甚至實體的各個屬性),都可以通過配置子查詢條件的方式,在進行數據庫數據查詢的時候,給查詢增加子查詢條件,來對數據進行不同的權限控制。
實體配置的緩存系統
在緩存系統中,根據前面權限系統收集到的數據實體信息,可以針對每個數據實體,不同的緩存策略(如是否啟用緩存、過期時間)等,達到不同的業務數據區分對待。
開源說明
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快速開發框架解說系列