哈喽!大家好,我是「奇点」,江湖人称 singularity。刚工作几年,想和大家一同进步
一位上进心十足的【Java ToB端大厂领域博主】!
喜欢java和python,平时比较懒,能用程序解决的坚决不手动解决✨ 如果有对【java】感兴趣的【小可爱】,欢迎关注我
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️
————————————————如果觉得本文对你有帮助,欢迎点赞,欢迎关注我,如果有补充欢迎评论交流,我将努力创作更多更好的文章。
iMeta是一个基于JAVA语言开发的模型驱动(MDD)开发框架,以元数据为基础,与微服务架构(Micro-Services)天然融合,配置文件为主要开发方式,适用于以关系数据库和No-Sql数据库为数据存储介质、以数据查询、持久化为主要操作方式、面向微服务的、部署在云(Cloud)中的应用程序。
- MDD:以用户模型(参考“OMG四层元模型架构”中M1层)为基础的开发框架,使用元数据描述用户模型,元数据结构借鉴OMG M2层静态元素结构,开发时以元数据为基础、以配置文件为主要开发方式。
- Zero Coding:零JAVA代码,主要开发方式是书写配置文件,包括:用户模型、数据查询、导出导出等。
- Micro-Services Inside:天然支持微服务,涉及远程服务、缓存服务、本地服务的查询统一查询配置,对开发人员透明,极大降低开发复杂度和成本。
- Deep integration with Spring:iMeta与Spring深度集成,参考Spring Boot的实现方式,实现了自动配置,开发时引入jar包即可。
- Extensible:iMeta框架采用分层架构,完全基于接口,底层使用接口定义系统脉络、体现系统整体结构;同时也提供了大量的默认实现,主要位于Spring集成层中,这些默认实现可以被替换、扩展。
iMeta框架已经为Web、数据库、No-Sql、异步服务等提供了默认实现,为了更加高效开发,最好具备以下知识。
iMeta Framework | ORM | |
---|---|---|
设计 | 以服务为基础 | 以实体为基础 |
抽象层次 | M2元数据,对M1的抽象 | M1,对业务数据的抽象 |
设计 | 以服务为基础 | 以实体为基础 |
开发视角 | 基于抽象:用户模型、类图 | 基于具体实现:实体、数据库表 |
功能 | 关系数据库、No-SQL数据库、远程服务操作透明化 | 数据库操作透明化 |
数据源 | 关系数据库、No-SQL数据库、远程服务 | 关系数据库 |
面向关系数据库(例如:Mysql)开发时,ORM框架(例如:Mybatis、Hibernate)提供了基础的数据库操作能力,还提供了一定的缓存能力。随着云(Cloud)的日益普及、微服务架构日益流行,存粹的ORM框架已经很难解决关系数据库和No-Sql数据库综合使用的应用场景。 iMeta提供面向服务的ORM能力,自动适配集成来自不同数据源的数据,iMeta的关系数据库的操作部分仍然可以使用传统ORM能力。
微服务架构在容器环境中,可以轻松弹性扩容,已经成为云(Cloud)部署环境的首选框架。 iMeta框架天然支持微服务架构,统一查询服务自动识别分拆查询服务,聚合查询来自No-Sql数据库、关系数据库、远程服务不同数据源的数据,整个过程对开发人员是透明的,极大降低开发复杂度和成本。
Spring框架已经成为JAVA开发标配,Spring Boot的出现更是极大降低了JAVA Web开发的复杂度。 iMeta参考Spring Boot的实现方式,实现了自动配置,开发时引入jar包即可。
利用微服务框架可以很容易实现应用程序水平扩展,但通过WebFlux反应式框架实现纵向并发能力提升越来越流行,通过较少的资源提供更大的并发能力是一种趋势,尤其是在面向No-Sql数据库的应用中。 iMeta提供了集成WebFlux的能力,可以方便的开发涉及任务调度、网关、No-Sql数据库的应用程序。
元数据加载流程
元数据加载主要分为两个阶段:元数据定义阶段、元数据阶段,通过实现不同接口,可以进行功能扩展。 元数据定义是元数据的原材料,经过加工可以转换成元数据。
主要用于微服务化的数据查询、持久化和数据转换处理,例如:CRUD、导入导出,还提供任务调度、邮件、HTTP、代码生成等能力。
电子商城用户模型示例
包
类图
统计分析
用户模型中的静态类图可以认为是iMeta所需的原材料,基于此原材料生成元数据。
用户模型通常包含以下几个UML元素:包、类、属性、关系。关系主要描述类间关系,有继承、实现、关联、组合。
iMeta结合数据仓库模型,能够提供极为灵活的统计查询,一般情况下,无需一行JAVA代码。
元数据 Metadata
域是对应用所属领域的抽象,域用于隔离不同的应用,域的隔离策略有:不隔离、单实例不同库、服务隔离,域的隔离级别(IsolationLevel)目前有三种:远程服务、缓存服务、本地服务,通过隔离策略决定域的隔离级别。
iMeta中域在组件(Component)上声明,组件为最小的部署单元。
域隔离级别
隔离策略 | 相同域 | 不同域 |
---|---|---|
不隔离 | 本地服务/缓存服务 | 本地服务/缓存服务 |
单实例 | 本地服务(跨库)/缓存服务 | 本地服务(跨库)/缓存服务 |
服务隔离 | 本地服务/缓存服务 | 远程服务 |
隔离级别通过*Profile来确定,可以自定义MetaProfile。远程服务隔离级别设置在Property上,缓存服务隔离级别设置在Classifer上,本地服务隔离级别不用设置,但可能修改数据库表名。
对于远程服务和缓存服务隔离级别,需要在Classifier的service中设置访问方式,以供相应驱动使用。在Classifer的service属性中,可以指定明确的访问方式。
#服务协议格式 协议:驱动://服务器信息/数据源?参数列表 # 远程服务协议 service="remote:dubbo://: @ : / ?group=mall&interface=xxx.xxx&check=false&…" service="remote:dubbo://?group=mall&interface=xxx.xxx&check=false&…" service="remote:eureka://?application=xxx&…" # 缓存服务协议 service="cache:redis:// : @ : / ?key=cbo.goods.Goods&subkey=id&type=hash&…" service="cache:redis://1?key=cbo.goods.Goods&subkey=id&type=hash&…" service="cache:es:// ?p1=v1&…" service="cache:mongo:// ?p1=v1&…"
服务协议很多项不用设置,使用上下文中环境变量即可。如果什么都不设置,使用默认处理程序。缓存服务最好明确配置协议和驱动及关键参数。
用户模型 | 元数据模型 | 示例 |
---|---|---|
包 | Component | order,goods |
包间依赖 | Component.dependencies | |
基本类型 | DataType | Integer,DateTime,String |
枚举类型 | Enumeration | OrderStatus |
实体 | Entity | Order,OderDetail,Goods |
接口 | Interface | Code,Autditable |
组合关系 | Aggregation(V2)/Association(V1) type="composition" | Order -> OrderDetail |
关联关系 | 通过类型推断 | OrderDetail -> Goods |
继承关系 | Generalization | Goods -> Archive |
实现关系 | Realization | OrderBase -> Auditable |
属性 | Property | code,details,createTime |
方法 | Operation | |
方法参数 | Parameter |
说明
- 关联关系推断:属性的数据类型为复杂类型时,属性所属类型与属性数据类型间为关联关系。
- 组合关系是一种关系强烈的关联关系。
- V2中使用Aggregation不使用Composition的原因是:1. Composition的缩写容易与Component混淆; 2. Aggregation取自聚合根的含义,而非UML中的聚合关系。
查询方案
查询方案为统一查询引擎对外开发的唯一数据结构,所有的查询配置都要遵守查询方案的定义。
所有操作视角都统一到模型层,大多数应用模式仅依赖配置文件即可完成所有开发任务。
iMeta提供了统一查询引擎,将远程服务、缓存服务、本地服务的数据查询统一,实现细节对开发人员透明,所有操作视角都统一到模型层面,实现基于微服务的模型驱动开发;一般情况下,无需一行JAVA代码。
详细内容 查询引擎参考手册
iMeta提供了统一持久化机制,包括单实体持久化、组合实体持久化、批量新增,并提供了主外键设置、唯一性校验、数据合法性校验、默认值设置等默认规则;一般情况下,无需一行JAVA代码。
详细内容 持久化参考手册
iMeta提供了统一的数据转换服务,主要包括数据导出导出到Excel、csv文件;一般情况下,无需一行JAVA代码。
详细内容 DTS参考手册
iMeta提供了一套模版解析引擎,提供支持设计态根据元数据生成代码和支持运行时渲染数据两种功能。
iMeta提供了一套模版解析引擎,提供支持设计态根据元数据生成代码和支持运行时渲染数据两种功能。
详细内容 模版参考手册
iMeta提供了一个简洁快速的imeta-boot-starter-service模块,仅仅通过配置文件,即可完成应用程序开发,一般情况下,无需一行JAVA代码。
详细内容 零JAVA代码参考手册
iMeta可以快速集成Spring WebFlux反应式编程框架,一般用于任务调度、路由分发、No-Sql数据库数据存储。
如果觉得本文对你有帮助,欢迎点赞,欢迎关注我,如果有补充欢迎评论交流,我将努力创作更多更好的文章。欢迎大家订阅我后续会抽空将之前挖的坑满满填上,最近工作实在是有点多忙不过来各位粉丝见谅