系列文章导航

  1. 【开源】OSharp框架解说系列(1):总体设计
  2. 【开源】OSharp框架解说系列(2.1):EasyUI的后台界面搭建及极致重构
  3. 【开源】OSharp框架解说系列(2.2):EasyUI复杂布局及数据操作
  4. 【开源】OSharp框架解说系列(3):扩展方法
  5. 【开源】OSharp框架解说系列(4):架构分层及IoC
  6. 【开源】OSharp框架解说系列(5.1):EntityFramework数据层设计
  7. 【开源】OSharp框架解说系列(5.2):EntityFramework数据层实现
  8. 【开源】OSharp框架解说系列(6.1):日志系统设计
  9. 【开源】OSharp3.0框架解说系列:新版本说明及新功能规划预览
  10. 【开源】OSharp3.0框架解说系列(6.2):操作日志与数据日志
  11. 【开源】OSharp3.3框架解说系列:重新开源及3.3版本新特性
  12. 【开源】OSharp3.3框架解说系列(7.1):初始化流程概述
  13. 【开源】OSharp3.3框架解说系列:开发计划与进度
  14. 【开源】OSharp3.3框架解说系列(7.2):初始化-配置节点
  15. 【开源】OSharp3.3框架解说系列(7.3):初始化-依赖注入
  16. 【开源】OSharp3.3框架解说系列(7.4):初始化-数据组件
  17. 【开源】OSharp3.3框架解说系列(7.5):初始化-基础数据

前言

OSharp是什么?

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

  前一个系列讲的主要是我对架构设计的理解以及怎样用好EntityFramework的一些想法,在技术细节上并没有太多的考究。不幸的是,不少同学把这个架构当作框架来用了,里边留的很多坑,坑苦了很多人,真是误人子弟,深表愧疚。于是重新整理代码,整理思路,鼓捣出了这个我们将要详解的开源框架:OSharp。这次,我们真的深入地说框架了,而不是架构那样只是蜻蜓点水。

  关于OSharp:OSharp是我在“MVC EF 技术交流群”(5008599)发起的一个群内开源项目。项目名字来源也挺有意思,在头脑风暴起名时谁说的一句“O-Shit”,后来结合CSharp,演化成了OSharp。当时40多个群成员集资购买阿里云服务器作为TFS的服务器,本想以TFS为团队合作平台进行合力开发的,但后面由于组织不力,合作得并不是很理想,基本上不了了之。不过大家的热情还是深深的激励着我坚持按原来的想法把底层基本做成型了。于是便有了现在这个开源项目,一个架构上,兼容上来说很初级的框架。

  OSharp是一个依赖于EntityFramework,专注于业务数据模型与EntityFramework解耦的适用于中小型项目开发的(插件式)框架。OSharp将支持基于OSGi.NET的插件式开发,但我们还是会从非插件式讲起,详细了解OSharp开发框架的方方面面。在本系列中,将会讲解到不少非常实用的技术与编码技巧,欢迎关注。

  本系列使用的开发环境为:Windows7 SP1、Visual Studio 2013、Sql Server 2012,.NET Framework 4.5,github.com 代码托管,并使用 Resharper 8.0.2 进行代码优化。

  温馨提示:本系列非入门级教程,对于基础知识不会做过多的讲解,读者最好对系统架构,IoC依赖注入,面向接口编程,EntityFramework数据存储等方面的知识有较好的理解。

架构图

  

架构说明

使用技术(库)说明

  • 技术平台:.NET Framework 4.5
  • 技术框架:ASP.NET MVC5 + WebAPI + SignalR
  • 数据存储:EntityFramework 6
  • 数据序列化:使用JSON.NET作为JSON序列化的主要工具
  • 数据映射:AutoMapper,主要用于数据传输对象DTO与数据实体模型Model之间的相互转化,免于繁杂的对象属性赋值
  • IoC组件:Autofac,定义了一个专用于处理映射的空接口IDependency,用于处理IoC接口与实现的批量映射,避免Autofac与各个层次耦合
  • 日志记录:定义通用日志记录接口与基础API,日志输出方式可以使用现成的任意日志组件(如log4net)
  • 缓存处理:未定
  • 。。。

项目工程详解

  1. 通用工具组件:OSharp.Utility

    说明:分类封装通用的与技术无关的辅助工具类功能
    依赖项:JSON.NET

  2. Web组件:OSharp.Web

    说明:封装Web相关的Webform,MVC,WebApi,SignalR等Web技术的辅助功能
    依赖项:1.OSharp.Utility,2.ASP.NET MVC,3.ASP.NET WebApi,4.SignalR,5.JSON.NET

  3. OSharp框架核心组件:OSharp.Core

    说明:1.定义OSharp框架的核心API,是整个框架运行的骨架
    2.该骨架提供数据存储,缓存,权限等模块的基础接口或基类,不提供具体实现
    3.业务层依赖于此层的接口与基类进行业务操作,而不依赖于具体的实现
    4.日志API为了使用方便,已经迁移到OSharp.Utility
    依赖项:OSharp.Utility

  4. EntityFramework数据存储组件:OSharp.Core.Data.Entity

    说明:1.提供OSharp.Core中定义的数据存储功能的EntityFramework的实现方案
    2.本框架的数据组件将不做各个ORM的兼容性处理,为充分发挥EntityFramework的性能优化,本框架将强依赖于EntityFramework
    依赖项:1.OSharp.Utility,2.OSharp.Core,3.EntityFramework,4.AutoMapper

  5. 普通(非插件式)示例工程:OSharp.Demo.Web

    说明:1.为尽量简化项目结构,本工程不采用类库划分层次,而采用文件夹分层方式
    2.各文件夹说明如下:
     2.1 Models:用于EntityFramework数据存储操作的数据实体模型,与数据库中的表对应
     2.2 EntityConfigurations:数据实体与数据库的映射类,实体将依靠这些映射类加载到与业务解耦的上下文中,并使用 Fluent API 配置数据映射的细节
     2.3 Dtos:DTO是业务层的输入信息,Controller与业务层之间通信数据的承载体,用户的交互数据将以“DTO+简单类型数据”的形式传递到业务层中进行处理,DTO与Model之间的映射使用AutoMapper来进行,以减少繁杂的属性赋值操作和增加代码的可维护性
     2.4 Services:业务契约,业务实现将以模块为划分,而不是以实体为划分。以模块为划分单元,可增强业务操作的内聚性,但为了方便处理各个实体的业务,推荐使用 局部类(partial)的方式来组织实现层的代码
    依赖项:1. OSharp.Utility,2. OSharp.Web,3. OSharp.Plugin,4. OSharp.Core,5. ASP.NET MVC

开源说明

github.com

  OSharp项目已在github.com上开源,地址为:https://github.com/i66soft/osharp,欢迎阅读代码,欢迎 Fork,如果您认同 OSharp 项目的思想,欢迎参与 OSharp 项目的开发。

  在Visual Studio 2013中,可直接获取 OSharp 的最新源代码,获取方式如下,地址为:https://github.com/i66soft/osharp.git

  

nuget

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

【开源】OSharp框架解说系列(1):总体设计及系列导航的更多相关文章

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

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

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

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

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

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

  4. 【开源】OSharp框架解说系列(4):架构分层及IoC

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 关于UIAlertAction如何修改sheet上的字体颜色

    相信很多程序员都会遇到需求是这样的: 但是你发现无论怎么设置cancel和Destructive都无法让红色字体移动到下面取消按钮上: 其实之前一直用错,用了ios9之前的UIActionSheet这 ...

  2. Smack4.1注册新用户

    更新了smack4.1后,发现之前的注册表单不能使用了,很多属性都不能使用. 发现4.1把帐号的出来都集中到 org.jivesoftware.smackx.iqregister.AccountMan ...

  3. Android带边框表格的实现

    最近做项目需要用到表格,数据是动态指定的,本来用GridView是很方便的,可是老大不同意用这么重量级的控件,想办法吧. 做表格很容易想到用TableLayout,那就自定义一个来搞. 一.表格最蛋疼 ...

  4. PHP uniqid 高并发生成不重复唯一ID

    http://www.51-n.com/t-4264-1-1.html PHP uniqid()函数可用于生成不重复的唯一标识符,该函数基于微秒级当前时间戳.在高并发或者间隔时长极短(如循环代码)的情 ...

  5. StreamingAssets文件夹在不同平台上的引用

    On a desktop computer (Mac OS or Windows) the location of the files can be obtained with the followi ...

  6. 初涉深度优先搜索--Java学习笔记(二)

    版权声明: 本文由Faye_Zuo发布于http://www.cnblogs.com/zuofeiyi/, 本文可以被全部的转载或者部分使用,但请注明出处. 上周学习了数组和链表,有点基础了解以后,这 ...

  7. Pyserial操作串口

    pySerial 介绍 封装了串口通讯模块,支持Linux.Windows.BSD(可能支持所有支持POSIX的操作系统),支持Jython(Java)和IconPython(.NET and Mon ...

  8. 网站压力负载测试工具:Web版已逝,只好送大伙单机版

    前言: 最近老板资金周转出了点问题,工资好久没发了,于是暂闲置在家,静待老板弄到钱东山再起的消息: QQ群里,偶尔不时的会有人问,原来的分布式网站负载工具怎么下载不了啦?或者不能用啦?之类的问题. 我 ...

  9. 利用SSH Filesystem实现远程文件系统

         远程文件系统的访问有很多种不同的实现方式,一些常见的连接方式比其它特定情况下的更有用.最著名的一个例子就是微软的通用互联网文件系统(CIFS),它可以容许微软Windows"映射网 ...

  10. [译]MVC网站教程(二):异常管理

    介绍 “MVC网站教程”系列的目的是教你如何使用 ASP.NET MVC 创建一个基本的.可扩展的网站. 1)   MVC网站教程(一):多语言网站框架 2)   MVC网站教程(二):异常管理 3) ...