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

  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快速开发框架解说系列

【开源】OSharp3.0框架解说系列:新版本说明及新功能规划预览的更多相关文章

  1. 【开源】OSharp3.0框架解说系列(6.2):操作日志与数据日志

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

  2. 【开源】OSharp框架解说系列(1):总体设计及系列导航

    系列文章导航 [开源]OSharp框架解说系列(1):总体设计 [开源]OSharp框架解说系列(2.1):EasyUI的后台界面搭建及极致重构 [开源]OSharp框架解说系列(2.2):EasyU ...

  3. 【开源】OSharp3.3框架解说系列:重新开源及3.3版本新特性

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

  4. 【开源】OSharp3.3框架解说系列(7.1):初始化流程概述

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

  5. 【开源】OSharp3.3框架解说系列:开发计划与进度

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

  6. 【开源】OSharp框架解说系列(5.2):EntityFramework数据层实现

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

  7. 【开源】OSharp框架解说系列(3):扩展方法

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

  8. 【开源】OSharp框架解说系列(2.2):EasyUI复杂布局及数据操作

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

  9. 【开源】OSharp框架解说系列(2.1):EasyUI的后台界面搭建及极致重构

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

随机推荐

  1. ASP.NET图形验证码的生成

    效果: 调用方法: int[] r = QAPI.VerifImage.RandomList();//取得随机数种子列 );//产生验证码字符 pictureBox1.Image = QAPI.Ver ...

  2. ITree诞生啦!

    经过一个月的码码码,一个面向OIer的ITree终于来辣! ... (似乎把OI遗弃在了某个角落了........... 一个月里,从只会py到写出ITree,真是不容易呢(其实就是两个多礼拜而已= ...

  3. 【BFS】HDU 1495

    直达–> HDU 1495 非常可乐 相似题联动–>POJ 3414 Pots 题意:中文题,不解释. 思路:三个杯子倒来倒去,最后能让其中两个平分即可.可能性六种.判定的时候注意第三个杯 ...

  4. javascript基础知识

    1.javascript 表单验证,减轻服务器压力 制作网页特效 动态改变页面内容 基于对象和事件驱动的,具有安全性能的脚本语言 交互,脚本语言.解释性语言,边执行边解释 2.script标签 添加位 ...

  5. call,apply学习小结

    之前一直不太清楚js的call,apply的作用是什么,直到看到了这篇博文 http://blog.csdn.net/myhahaxiao/article/details/6952321 functi ...

  6. Odoo 二次开发教程(三)-第一个Model及Form、Tree视图

    创建完我们的模块,接下来我们就要为我们的模块添加一些对象.今天我们将要创建一个学生对象(tech.student)和一些基本的属性,并将用form和tree视图将其展示出来: 一. 创建tech.st ...

  7. HDU3465 树状数组逆序数

    Life is a Line Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)T ...

  8. SQL 去掉某字段括号中的值

    今天在数据库匹配数据的时候,发现一些数据存在别名,导致我的数据匹配不上.在这里记录分享一下 例如: 李钟硕 (Lee Jong Suk),这里我匹配的是 “李钟硕” 示例1: SELECT rever ...

  9. apk反编译

    在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用 ...

  10. 测试MailUtils,作用是发邮件

    package cn.itcast.test; import java.io.IOException; import javax.mail.MessagingException; import jav ...