# business-entity-framework **Repository Path**: amtech/business-entity-framework ## Basic Information - **Project Name**: business-entity-framework - **Description**: UBML领域层模型业务实体的运行时框架--业务实体框架,属于低代码后端模型以及运行时。它与其配套项目构成了集建表、持久化、业务逻辑(自定义的方法)、业务事件于一身的低代码后台开发及运行框架。基于业务实体框架,可快速开发后台服务(内置CRUD操作,快速定义自定义操作),并且支持自定义数据类型。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 26 - **Created**: 2023-07-01 - **Last Updated**: 2023-07-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 业务实体框架 ### 介绍 采用DDD领域驱动设计方法,本仓库属于UBML低代码建模体系中领域层模型结构描述仓库。 在DDD领域驱动设计中,领域层作为核心层,承载了领域核心的业务逻辑和数据结构。UBML采用领域模型驱动设计方法,引用业务实体(BusinessEntity,简称BE)描述领域模型,业务实体支持“充血模型”设计,包含了实体数据结构和丰富的业务逻辑建模,可以支撑业务逻辑开发中各种场景的建模。业务实体通过提供细粒度的业务逻辑建模支撑,通过业务实体将业务逻辑打散,进行细粒度拆分,然后在不同的时机将这些业务逻辑进行编排,最终实现业务逻辑的沉淀复用。 业务实体模型介绍请参照[业务实体模型](https://gitee.com/ubml/business-entity-model/tree/master) 业务实体框架是基于业务实体模型提供的代码级运行时框架,承载了领域核心的业务逻辑和数据结构,提供了实体、值对象、聚合、领域服务、领域事件等领域模型核心特性支持,内置支持基本的CRUD操作,还支持自定义领域服务操作、各个时机的扩展事件、校验规则等自定义逻辑。 业务实体框架提供了细粒度的业务规则配置与编排能力,支持核心业务逻辑的可持续沉淀与复用。通过提供BFF层(Backend For Frontend)与特定应用场景和功能界面解耦,避免了领域核心的业务逻辑受具体业务功能的干扰,有助于核心业务逻辑的稳定。 ### 业务实体框架主要特性 业务实体框架基于领域驱动设计方法,将DDD中领域层进行抽象封装,具有稳定可靠、可持续积累复用、易于扩展、高性能、高效五大特性。 #### 稳定可靠 **稳定性**:在UBML中,采用前后端分离架构方法,在业务实体框架的基础上,提供了BFF框架(Backend For Frontend,服务于前端的后端):业务实体框架作为后端 承载核心的业务逻辑的实现,BFF框架承载与前端对应的特定业务场景的业务逻辑实现,这样不管前端如何改变,只要核心业务规则不变,后端逻辑总是稳定不变的。 **可靠性**:在业务实体框架中,提供了内置的CRUD操作,并且在CRUD操作的基础上,封装了全场景的数据访问接口,这样任何业务逻辑对数据的修改都通过业务实体框架接口进行; 同时,在业务实体框架中在CRUD不同时机提供了业务逻辑(计算规则、校验规则)挂接能力,业务逻辑可以挂接到数据变化的不同时机上。这样不管对数据如何进行改变,都绕不过去基于 数据变化的业务逻辑运行,保证后台数据和业务规则不会出错。 #### 可持续积累复用 1、在UBML中,采用DDD设计方法, 将系统划分为若干微服务单元,微服务单元内部不同职责的功能划分为若干业务对象,业务实体承载BO核心的业务逻辑。在各个 业务实体之间,只能通过提供的方法接口来访问,无法直接访问到内部的逻辑,这样实现各个功能之间的解耦。 2、在业务实体内部,业务实体框架提供了一种细粒度的业务逻辑编排机制,使业务开发只是开发最细粒度的业务逻辑,然后对这些细粒度的业务逻辑进行编排,这样细粒度的 业务逻辑就很容易积累和复用。 3、在领域层,提供了业务字段封装了数据类型的定义。通过业务字段,可以将可复用的数据类型(比如邮箱、组织、地址等等)进行统一的封装,在业务实体中集成了业务字段类型 提升了数据类型的积累和复用。 #### 易用扩展 业务实体框架,通过提供细粒度的业务逻辑挂接机制,使应用开发将大的规则打散、编排,这样如果想加新的业务逻辑,直接将新的业务逻辑插入到相应的时机中即可,扩展非常方便。 #### 高性能 业务实体框架提供了JIT(即时编译)机制、数据增量精简传输、三级数据缓存、两阶段数据库提交等特性,减少了运行时解析、数据传输、数据库交互等各个时机的 消耗,最大化地提升了并发效率。 #### 高效 在UBML社区版(即将发布)中,提供了业务实体建模IDE,能够做到5分钟、零编码地开发一个简单(基本CRUD)的应用。对于中等规模的后端功能,开发效率比手工编排 也能提升数倍,并且只需少量编码,其他内容框架自动集成。 ### 运行模式 在UBML中,业务实体提供了两种运行模式:代码生成运行和解析运行。 **代码生成运行**:通过代码生成器,将业务实体模型生成可运行的代码并将其编译部署,运行时运行编译后的结果(比如Java语言中的Jar包)。此模式适用于对运行效率要求高的功能; **解析运行**:不生成代码,运行时直接读取并解析业务实体模型进行运行。 此模式能够更加灵活,并且部署无需重启服务,效率更高。 不管是代码生成和解析运行,都是基于业务实体框架运行起来的,业务实体框架是生成的代码和解析引擎两者的复用的结构。 ##### 业务实体相关仓库 在UBML项目中,业务实体相关仓库有四个,分别是:[业务实体模型(business-entity-model)](https://gitee.com/ubml/business-entity-model)、业务实体框架(business-entity-framwork)、 业务实体生成器(即将开放)、业务实体解析引擎(即将开放)。 业务实体生成器依赖业务实体,通过加载业务实体,将之生成为基于(代码继承、依赖等)业务实体框架的java代码; D 业务实体解析引擎:通过解析业务实体模型来运行应用功能。 ### 目录结构 待完善 ### 约束 **开发语言:** Java,开发框架SpringBoot **依赖仓库:** 底层开发框架相关: [caf-framework](https://gitee.com/ubml/caf-framework)、 [caf-boot](https://gitee.com/ubml/caf-boot) 元数据基础框架: [metadata-common](https://gitee.com/ubml/metadata-common)、 [metadata-service](https://gitee.com/ubml/metadata-service)、 [metadata-service-dev](https://gitee.com/ubml/metadata-service-dev) 数据库对象相关: [database-object-model](https://gitee.com/ubml/database-object-model)、 [database-object-service](https://gitee.com/ubml/database-object-service) **相关仓库:** [business-entity-framework](https://gitee.com/ubml/business-entity-framework)、 [business-entity-generator](https://gitee.com/ubml/business-entity-generator)、 [business-entity-engine](https://gitee.com/ubml/business-entity-engine) ### 使用说明 待完善 ### 参与贡献 参与贡献,请参照[如何贡献](https://gitee.com/ubml/community/blob/master/CONTRIBUTING.md)获取帮助。 [![UBML/business-entity-framework](https://gitee.com/ubml/business-entity-framework/widgets/widget_card.svg?colors=4183c4,ffffff,ffffff,e3e9ed,666666,9b9b9b)](https://gitee.com/ubml/business-entity-framework)