Fork me on GitHub

【开源】OSharp3.0框架解说系列:新版本说明及新功能规划预览

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的项目图:

OSharp2.0的项目图

  OSharp3.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的步骤吧:

  1. https://github.com/i66soft/osharp 右上角 Fork 一下项目源码,在你的账户下会有一份代码的副本
  2. 使用VisualStudio Clone 你账户下的代码到本地,更改代码,再提交,就完成代码的更改了
  3. 如果觉得有并入 i66soft 主干的价值,可以向主干提交 pull request申请,如果我审核通过,就可以合并到主干了,这就形成了一次开源代码的贡献了
  4. 如果我没有接受合并,你也可以在你的账户上按你的风格去发展osharp
  5. 我也会经常浏览各个Fork版本对项目的更改,如果觉得有价值,也会主动合并到主干代码中,也能形成一次对开源的贡献
  6. 为保证提交的质量,也便于对代码的合并,每次更改与提交应该只做一件事,只提交必要的更改

nuget

  OSharp的相关类库已经发布到nuget上,欢迎试用,直接在nuget上搜索 “osharp” 关键字即可找到

osharp在nuget

系列导航

本文已同步到系列目录:OSharp快速开发框架解说系列

posted @ 2015-07-05 20:15  郭明锋  阅读(7335)  评论(51编辑  收藏  举报