Rafy 领域实体框架简介

按照最新的功能,更新了最新版的《Rafy 领域实体框架的介绍》,内容如下:



本文包含以下章节:

  • 简介
  • 特点
  • 优势

简介

Rafy 领域实体框架是一个轻量级 ORM 框架。

与一般的 ORM 框架不同的是,它不只关注于一般性的面向对象实体与关系数据库的映射,而是更关注于富领域模型(聚合实体)与关系数据库的映射。使得开发者可以非常方便地使用富领域模型的同时,配备强大的实体属性设计、查询功能,并兼顾了极高的开发效率。

该框架可脱离 Rafy 框架其它组件独立运行,同时集领域驱动设计、面向服务架构、模型驱动架构、产品线工程方法于一身,是 Rafy 框架中其它组件(如界面生成框架等高级功能)的基础。

Rafy 领域实体框架目前已经在大量的真实产品、项目中被应用,且口碑较好。我们经常会在开发者在使用后收取使用者的反馈。开发者在使用之后,特别是能熟练使用此框架之后,往往觉得通过此框架来开发应用程序,开发效率较高。框架本身也针对平时开发过程中一些经常需要处理的场景提供了易用的解决方案,这能让开发者更加专注于业务逻辑、而不是技术问题。这也正是领域驱动设计的核心设计哲学。

特点

Rafy 领域实体框架,有以下特点:

  • 领域驱动设计

    相对于一些注重概念、使用复杂的 DDD 框架,Rafy 更加注重实践。实现了 DDD 中与实际开发结合紧密的重要概念:聚合实体、标识、仓库、服务、分层架构、CQRS,同时保证了开发的易用性。详情参见:Rafy 与经典 DDD 的关系。 实体基类的设计支持关系的延迟加载、自动冗余属性、大对象属性、数据绑定、树型实体等。详情见:领域实体。

    实体使用了自定义属性系统(托管属性框架)。这使得运行时可以不再使用反射,而是使用内置的属性管理方式,运行效率更高。同时,这些属性的 API 直接公布,更方便开发人员编写面向自己应用的框架。详情见:实体属性。

    仓库基类则实现了组合实体的添加、删除、修改,并提供了大量的默认查询。详情见:实体仓库。

    领域服务是跨组合实体的业务逻辑的封装体,也是 SOA 架构的基础。详情见:领域服务。

  • 插件化(组件化)架构

    Rafy 实体框架相对于传统的 ORM 框架,一个很大的不同在于支持插件化的架构。

    实体的插件化使得我们可以把一组相关的实体封装为一个业务组件,并最终逐渐形成一个业务组件的仓库。当开发新的应用程序时,可以在业务组件中选择相关组件进行组装,以实现在业务级别上的更高层次的重用。

    但是,业务组件要实现真正的重用,需要给出不同的层次的扩展点。否则,使用者会因为当前业务组件能力的不足而不得不选择弃用该组件,转而自行重新开发类似的功能。这是目前大量组件化框架所遇到的最大问题。针对这个问题,基于 Rafy 编写的实体组件,内置提供了多种多样的扩展点:实体属性的扩展(添加新的属性、替换当前属性的逻辑)、查询的扩展(添加新查询、替换当前查询逻辑)、业务控制器的扩展(添加新逻辑、替换当前逻辑、替换整个控制器)、服务的扩展。这些扩展点都可以由额外的新插件来完成,而无需要修改当前插件的源码。这样的方式使得组件的使用者在组件本身能力不够时,不需要弃用该组件,而是直接编写新插件来扩展该组件即可,进而大大提升了组件的重用度。

    详情见:产品线工程、插件化架构、现有插件。

  • CodeFirst 开发模式

    使用 Rafy 领域实体框架,采用 CodeFirst 开发模式,可以使得开发人员在开发过程中只关心领域实体的关系、属性,而不需要关心数据库结构的变化。

    在开发过程中,只需要配置好数据库连接后,建库、建表、建字段都会由 Rafy 完成。实体结构上的变化:类型、属性、关系,都会由 Rafy 自动同步到数据库上。相对于传统的三层应用程序,在实体中添加、删除一个字段,开发人员不再需要修改应用程序的数据库、DAL、BLL代码,而由框架自动同步,大大提高了开发效率。

    同时,生成的数据库满足第三泛式的要求。

    详情参见:数据库同步功能。

  • 支持 Net Standard

    最新的 Rafy 领域实体框架是基于 Net Standard 版本来开发的,也就意味着它可以很好地配合 .Net Core 来实现跨平台(Windows、Linux、IOS)。

  • 多数据库支持

    Rafy 领域实体框架支持把同一份实体代码映射到多种数据库。开发者切换数据库时,只需要简单地修改连接字符串即可。

    目前已经支持了 SqlServer 2005-2012、Oracle10、MySql,以及文件型数据库 SQLCE4。其它数据库的支持也在研发中。

    详情参见:多数据库支持。

  • 支持部署为单机、直连、分布式等多种应用程序

    领域实体框架在设计初就已经考虑到了各种可能会被使用的应用程序类型。目前也已经在很多类型的真实项目中被应用,稳定,高效。开发者可以在各种类型的应用程序中使用 Rafy 领域实体框架:

  • 单机应用程序

    简单的一些本地程序,一般使用 SQLCE 文件型数据库(SqlLite 正在支持中……)。

  • 直连数据库程序

    与单机应用程序类似,在此类程序中可使用 Rafy 直连数据库,如 SQLServer、Oracle、MySql 等。

  • 分布式应用程序

    Rafy 中的领域实体本身可直接用于分布式传输,所以可以非常方便地开发客户端+服务端(C/S)程序。另外,实体仓库的设计,使得开发者不需要修改一行代码,即可无缝支持分布式远程调用。

    也就是说,使用 Rafy 编写的实体、查询、服务,原生就支持分布式的部署方式。既可以部署为直接连接数据库,也可以部署为客户端通过服务来间接访问数据库。同时,Rafy 针对分布式传输进行了优化,如:基于自定义的托管属性框架,在对实体的数据进行序列化时,只会传输有效数据,而不会传输实体中默认的空数据,也提高了数据传输的效率。

    部署的相关内容,详情参见:部署。

  • 零配置

    框架的使用对开发人员要求非常简单,默认情况下基本不需要作任何配置。这样提高了开发的效率。

    Rafy 框架的快速开发思想之一是支持默认值,尽量少使用配置。在必要时,仅需非常少的配置即可达到运行时的灵活变化。

  • 与 VS 集成

    Rafy 的一个重要作用就是为了提升开发效率,所以我们为 VisualStudio 开发了 RafySDK 插件,其中包含项目模板、代码生成、领域建模等功能。一体化的开发环境,可以更加快速地开发 Rafy 应用程序。

  • 稳定、质量有保障

    领域实体框架的代码行有 5 万多行。为了保证框架的稳定性及运行质量,我们为框架编写了 700 多个单元测试,以测试框架的各个功能是否运转正常并保证兼容性。

优势

与 EF、NH 等传统 ORM 框架相比,使用 Rafy 领域实体框架的优势在于:

  • 领域驱动设计:传统 ORM 只是为了解决面向对象类型与关系数据库的映射,而 Rafy 解决的是领域实体(领域模型)与关系数据库的映射。
  • 插件化架构、产品线工程:使得通用业务逻辑真正能够以插件的形式开发,并真正能实施业务组件级别的大规模重用。例如:现有插件。
  • 传统 ORM 只做数据处理,开发人员不得不继续考虑很多其它的问题,例如分层架构、分布式传输、远程懒加载、界面数据绑定等功能;而 Rafy 则提供了一体化解决方案,包括:仓库设计、分布式设计、托管属性设计、服务设计、界面绑定设计等。
时间: 2024-10-15 23:23:18

Rafy 领域实体框架简介的相关文章

Rafy 领域实体框架 - 树型实体功能(自关联表)

  在 Rafy 领域实体框架中,对自关联的实体结构做了特殊的处理,下面对这一功能进行讲解.   场景 在开发数据库应用程序时,往往会遇到自关联表的场景.例如,分类信息.组织架构中的部门.文件夹信息等,都是不限制层级的.如下图中操作系统的文件夹: 在开发这类程序时,往往是设计一张表,表中的一个可空的外键直接引用这张表本身.对应的实体如下图: 而针对这样的场景,许多ORM框架都不做默认的处理,开发者往往每次都要做重复的工作:建立类似结构的表,编写关系处理代码,编写查询代码--而这种场景经常会出现,

C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(上)

译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(上)),不对的地方欢迎指出与交流. 章节出自<Professional C# 6 and .NET Core 1.0>.水平有限,各位阅读时仔细分辨,唯望莫误人子弟. 附英文版原文:Professional C# 6 and .NET Core 1.0 - 38 Entity Framework Core ------------------------------- 本章内容 En

应用程序框架实战十五:DDD分层架构之领域实体(验证篇)

在应用程序框架实战十四:DDD分层架构之领域实体(基础篇)一文中,我介绍了领域实体的基础,包括标识.相等性比较.输出实体状态等.本文将介绍领域实体的一个核心内容——验证,它是应用程序健壮性的基石.为了完成领域实体的验证,我们在前面已经准备好了验证公共操作类和异常公共操作类. .Net提供的DataAnnotations验证方法非常强大,Mvc会自动将DataAnnotations特性转换为客户端Js验证,从而提升了用户体验.但是客户端验证是靠不住的,因为很容易绕开界面向服务端提交数据,所以服务端

应用程序框架实战十四:DDD分层架构之领域实体(基础篇)

上一篇,我介绍了自己在DDD分层架构方面的一些感想,本文开始介绍领域层的实体,代码主要参考自<领域驱动设计C#2008实现>,另外参考了网上找到的一些示例代码. 什么是实体 由标识来区分的对象称为实体. 实体的定义隐藏了几个信息: 两个实体对象,只要它们的标识属性值相等,哪怕标识属性以外的所有属性值都不相等,这两个对象也认为是同一个实体,这意味着两个对象是同一实体在其生命周期内的不同阶段. 为了能正确区分实体,标识必须唯一. 实体的标识属性值是不可变的,标识属性以外的属性值是可变的.如果标识值

实体框架(Entity Framework)简介

简称EF,与ADO.NET关系 ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,早期被称为 ObjectSpace,现已经包含在 Visual Studio 2008 Service Pack 1 以及 .NET Framework 3.5 Service Pack 1 中发表. 实体框架Entity Framework 是 ADO.NET 中的一组支持开发面向数据的软件应用程序的技术.是微软的一个

实体框架(Entity Frmaework)简介

l简称EF  NH l与Asp.Net MVC关系与ADO.NET关系 lADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,早期被称为 ObjectSpace,最新版本是EF6.0[CodeOnly功能得到了更好的支持] l实体框架Entity Framework 是 ADO.NET 中的一组支持开发面向数据的软件应用程序的技术.是微软的一个ORM框架.

实体框架6.0(Recipes)翻译系列 1 -----第一章 开始使用实体框架1

微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF版本更新太快,没人愿意去花时间翻译国外关于EF的书籍.使用Entity Framework开发已经有3年多了,但用得很肤浅,最近想深入学习,只好找来英文书<Entity Framework 6 Recipes>慢慢啃.首先需要说明的是,我英文不好,只是为了学习EF.把学习的过程写成博客,一是督促自

Hibernate框架简介(二)基本使用增、删、改、查

一.Hibernate框架简介 Hibernate是一个优秀的Java持久化层解决方案,是当今主流的对象-关系映射(ORM,ObjectRelationalMapping)工具 1.1.理解持久化 瞬时状态:在程序运行的时候,有些程序数据是保存在内存中,当程序退出后,这些数据就不复存在了,所以称这些数据的状态为瞬时状态 持久状态:在使用一此软件的时候,有些数据,在程序退出后,还以文件等形式保存在硬盘或者数据库中,称这些数据的状态是持久状态 持久化:持久化就是将程序中的数据在瞬时状态和持久状态之间

《Entity Framework 6 Recipes》翻译系列(2) -----第一章 开始使用实体框架之使用介绍 (转)

Visual Studio 我们在Windows平台上开发应用程序使用的工具主要是Visual Studio.这个集成开发环境已经演化了很多年,从一个简单的C++编辑器和编译器到一个高度集成.支持软件开发整个生命周期的多语言环境. Visual Studio以及它发布的工具和服务提供了:设计.开发.单元测试.调试.软件配置和管理.构建管理和持续集成等等.很少有开发人员因为还没有使用它而担心(注:作者应该是表达不用担心VS的能力),Visual Studio是一个完整的工具集.Visual Stu