OSharp是什么?

  OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现。与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现。依赖注入、ORM、对象映射、日志、缓存等等功能,都只定义了一套最基础最通用的抽象封装,提供了一套统一的API、约定与规则,并定义了部分执行流程,主要是让项目在一定的规范下进行开发。所有的功能实现端,都是通过现有的成熟的第三方组件来实现的,除了EntityFramework之外,所有的第三方实现都可以轻松的替换成另一种第三方实现,OSharp框架正是要起隔离作用,保证这种变更不会对业务代码造成影响,使用统一的API来进行业务实现,解除与第三方实现的耦合,保持业务代码的规范与稳定。

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

前言

  经过一段时间的努力,OSharp项目又有了全新的面貌,目前版本号已经更新到 3.3.2(github.comnuget),与之前3.0的版本又有了很大的差异。

  有些项目被拆分了,有些项目又被合并了,又新增了不少项目,有人就要问了,为什么不向前兼容呢?

  这个是比较无奈的事,有些是因为之前设计考虑不周,设计有缺陷,也有些是因为后面又有了更好的想法,也就不断的改进了,至少总是不断向好的方向发展的。并且现在框架处于开发阶段,不能保持稳定,不断调整是在所难免的。

重新开源

  经过这段时间的发展,OSharp项目已经比较算比较成熟了,能看得过眼,算是拿得出手了,现在也重新提交到了github开源平台中,开源地址依然为:

https://github.com/i66soft/osharp

  之前的旧版本,已经更名为osharp.v2,旧版本的地址为:https://github.com/i66soft/osharp.v2,请注意区分。

  欢迎大家关注(Watch)、支持(Star)、参与(Fork)《OSharp快速开发框架》开源项目的发展。

3.3版本新特性及项目组成

新特性

  下面我们还是先来看看,截止到目前为止,当前版本的一些新特性吧。

  1. 自定义了一个Web.Config的配置节点,用于配置框架中一些必要的开关,初始化环境等。当然,基于“约定胜于配置”的传统,这些配置不是必须的,如果不使用配置节点,系统也能按一套默认的设置来正常运行。
  2. 从框架级别对框架初始化进行了抽象,框架定义了初始化流程,具体的第三方组件,仅作为具体的服务实现存在。
  3. 参考 ASP.NET 5 的依赖注入设计,从框架级别提供了依赖注入的抽象封装,可以极其方便的使用第三方IoC组件实现依赖注入功能。
  4. 参考 ASP.NET 5 的“一切皆服务”的设计思想,配合第2点对依赖注入的支持,很容易构建一套可组装的松耦合的架构,一切变化点的实现方案均可很容易进行替换。
  5. 基于 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的步骤吧:

  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.3框架解说系列:重新开源及3.3版本新特性的更多相关文章

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

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

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

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

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

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

  4. Atitit 发帖机系列(8)  词法分析器v5 版本新特性说明)

    Atitit 发帖机系列(8)  词法分析器v5 版本新特性说明) v5  增加对sql单引号的内部支持.可以作为string 结构调整,使用递归法重构循环发..放弃循环发. V4 java dsl词 ...

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

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

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

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

  7. 【开源】OSharp框架解说系列(6.1):日志系统设计

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

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

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

  9. 【开源】OSharp框架解说系列(5.1):EntityFramework数据层设计

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

随机推荐

  1. 一些ES5的操作数组的方法

    在ES5规范中新增了不少操作数组的方法,特此罗列一下以备使用 1. forEach循环 有点类似jQuery的each循环 [12,23,36,4,5].forEach(function(v,k){ ...

  2. A library of generic data structures

    A library of generic data structures including a list, array, hashtable, deque etc.. https://github. ...

  3. iOS中一些算法函数

    rand() --- 随机数 求随机数 a-b     arc4random()%(b-a+1)+a abs() labs() ---- 整数绝对值 fabs()  fabsf()  fabsl() ...

  4. javascript变量的作用域

    javascript变量的作用域 基本类型和引用类型 基本类型值指的是简单的数据段,而引用类型值指的是那个可能由多个值组成的对象  讲一个值赋值给变量时,javascript解析器首先要确定是基本类型 ...

  5. Github+Jekyll —— 创建个人免费博客(一)从零开始

    摘要: 本文中我将介绍一下如何在github上搭建个人Blog(博客),也顺便让我们掌握一下github Pages功能,另外还涉及到Jekyll技术. ======================= ...

  6. phpcms 服务器安全认证错误

    本人将图片的js.images.css路径转移到CDN上了,上传附件的时候就出现了 “服务器安全认证错误”的提示.   找到文件 D:\wamp\www\phpcms\phpcms\modules\a ...

  7. 突破瓶颈,对比学习:Eclipse开发环境与VS开发环境的调试对比

    曾经看了不少Java和Android的相关知识,不过光看不练易失忆,所以,还是写点文字,除了加强下记忆,也证明我曾经学过~~~ 突破瓶颈,对比学习: 学习一门语言,开发环境很重,对于VS的方形线条开发 ...

  8. 如何在.NET上处理二维码

    在移动设备,网站以及应用程序间传送数据,而使用二维码真是一种较快捷的方法,也避免了蓝牙配对的混乱状况.ZXing.NET是一个开源,多格式1D/2D条码图像处理库的C#实现,ZXing.NET是个相当 ...

  9. Mac OS X上IntelliJ IDEA 13与Tomcat 8的Java Web开发环境搭建

    这标题实在有点拗口,不知道怎么写好,但看了标题也就明白文本的内容.最近几天在折腾这些玩意儿,所以写写总结.除了环境搭建,本文还是一篇入门级的上手教程. 去下载一些东西 JDK安装 Tomcat安装 T ...

  10. 《CLR.via.C#第三版》第二部分第13章节 接口 读书笔记(七)

    这章的书写感觉很普通,是些基础的认知知识. 其中一点的重要认知,泛型接口的好处(其实也是使用泛型的好处之一):编译时类型安全&处理值类型时减少装箱. 再说点书上没有的.本来这些知识我打算另外分 ...