iMeta框架使用方法

📢📢📢📣📣📣
哈喽!大家好,我是「奇点」,江湖人称 singularity。刚工作几年,想和大家一同进步🤝🤝
一位上进心十足的【Java ToB端大厂领域博主】!😜😜😜
喜欢java和python,平时比较懒,能用程序解决的坚决不手动解决😜😜😜

✨ 如果有对【java】感兴趣的【小可爱】,欢迎关注我

❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️
————————————————

如果觉得本文对你有帮助,欢迎点赞,欢迎关注我,如果有补充欢迎评论交流,我将努力创作更多更好的文章。
 

iMeta是一个基于JAVA语言开发的模型驱动(MDD)开发框架,以元数据为基础,与微服务架构(Micro-Services)天然融合,配置文件为主要开发方式,适用于以关系数据库和No-Sql数据库为数据存储介质、以数据查询、持久化为主要操作方式、面向微服务的、部署在云(Cloud)中的应用程序。

  1. MDD:以用户模型(参考“OMG四层元模型架构”中M1层)为基础的开发框架,使用元数据描述用户模型,元数据结构借鉴OMG M2层静态元素结构,开发时以元数据为基础、以配置文件为主要开发方式。
  2. Zero Coding:零JAVA代码,主要开发方式是书写配置文件,包括:用户模型、数据查询、导出导出等。
  3. Micro-Services Inside:天然支持微服务,涉及远程服务、缓存服务、本地服务的查询统一查询配置,对开发人员透明,极大降低开发复杂度和成本。
  4. Deep integration with Spring:iMeta与Spring深度集成,参考Spring Boot的实现方式,实现了自动配置,开发时引入jar包即可。
  5. Extensible:iMeta框架采用分层架构,完全基于接口,底层使用接口定义系统脉络、体现系统整体结构;同时也提供了大量的默认实现,主要位于Spring集成层中,这些默认实现可以被替换、扩展。

iMeta框架已经为Web、数据库、No-Sql、异步服务等提供了默认实现,为了更加高效开发,最好具备以下知识。

  1. [必选]具有一定软件工程基础:对UML有一定了解,能够绘制UML类图,理解类间关系(继承、实现、关联、组合)的含义,最好能够将业务中共性应用场景、模型抽象出基类或接口,这些是iMeta开发的原材料。
  2. [可选]具有一定WEB开发基础:了解cookie、cors、http、ajax等常见概念。
  3. [可选]具有一定No-SQL基础:当应用程序使用No-Sql数据库(例如:Redis)存储数据时,需要了解相关No-Sql一些常见操作。
  4. [可选]具有一定异步编程知识:当应用程序为高性能异步应用时,需要了解Reactor、WebFlux、No-Sql异步驱动一些基本知识。
  5. [可选]具有一定架构能力:能够合理拆分服务,实现高内聚低耦合的微服务架构。

OMG四层元模型架构

  • M0层 (实例对象层)
    • 是现实世界的具体事物/数据,代表一个个具体的实例对象。
  • M1层(用户模型层)
    • 是对现实事物的抽象,包含类及其关系,图中M1层对一个影片管理系统建模,抽象出类Movie类,包含title属性,用于描述现实世界中的影片;
    • 目的是使用软件系统描述现实世界。
  • M2层(UML层)
    • 对M1层建模使用的元素包括模型元素、图等进行抽象。
    • 使用Class抽象描述Movie,使用Attribute(Property)抽象描述title,使用Instance抽象描述具体一个影片实例;
  • M3层 (MOF层)
    • 是对M2层进一步抽象,该层为递归层,即可以继续高度抽象。
    • iMetaFramework参考MOF结构,抽象出元数据的结构;M1层(用户模型层)的元素就是领域元数据的原材料。

iMeta与其它架构的关系

iMeta vs ORM

iMeta FrameworkORM
设计以服务为基础以实体为基础
抽象层次M2元数据,对M1的抽象M1,对业务数据的抽象
设计以服务为基础以实体为基础
开发视角基于抽象:用户模型、类图基于具体实现:实体、数据库表
功能关系数据库、No-SQL数据库、远程服务操作透明化数据库操作透明化
数据源关系数据库、No-SQL数据库、远程服务关系数据库

面向关系数据库(例如:Mysql)开发时,ORM框架(例如:Mybatis、Hibernate)提供了基础的数据库操作能力,还提供了一定的缓存能力。随着云(Cloud)的日益普及、微服务架构日益流行,存粹的ORM框架已经很难解决关系数据库和No-Sql数据库综合使用的应用场景。 iMeta提供面向服务的ORM能力,自动适配集成来自不同数据源的数据,iMeta的关系数据库的操作部分仍然可以使用传统ORM能力。

iMeta & Micro-Services

微服务架构在容器环境中,可以轻松弹性扩容,已经成为云(Cloud)部署环境的首选框架。 iMeta框架天然支持微服务架构,统一查询服务自动识别分拆查询服务,聚合查询来自No-Sql数据库、关系数据库、远程服务不同数据源的数据,整个过程对开发人员是透明的,极大降低开发复杂度和成本。

iMeta & Spring

Spring框架已经成为JAVA开发标配,Spring Boot的出现更是极大降低了JAVA Web开发的复杂度。 iMeta参考Spring Boot的实现方式,实现了自动配置,开发时引入jar包即可。

iMeta & Spring WebFlux

利用微服务框架可以很容易实现应用程序水平扩展,但通过WebFlux反应式框架实现纵向并发能力提升越来越流行,通过较少的资源提供更大的并发能力是一种趋势,尤其是在面向No-Sql数据库的应用中。 iMeta提供了集成WebFlux的能力,可以方便的开发涉及任务调度、网关、No-Sql数据库的应用程序。

  • 总体思想
    模型驱动,面向服务,快速集成。
  • 系统架构
    分层体系,接口层用于定义系统脉络、体现系统整体结构;
    实现层借助Spring boot自动加载、灵活扩展,用于实现网络、数据库、缓存、邮件、调度任务等功能。
  • 面向微服务
    以服务为单元进行数据处理,将本地数据库、缓存服务、远程服务无缝集成,对开发人员透明,开发人员的视角均为用户模型。
  • MDA/D
    模型驱动架构、模型驱动开发,一切以用户模型为中心,以设计的视角开发高质量应用,有利于培养高素质团队,有效保留核心资产。
  • 面向接口
    尽可能早的在接口层中定义系统结构、体现系统设计思想;尽可能晚的与具体技术结合,降低耦合。
  • 配置大于开发,约定大于配置
    一切以代码为目标,提供BOOT-STARTER一站式零JAVA代码服务组件。
  • 多种扩展机制
    • 框架层提供*MetaBean、*MetaAware等接口,自动注入具体实现类。
    • 核心接口均有默认实现类,通过设置优先级,特定实现类可以替换默认实现类。
    • 提供拦截器机制,可以在核心方法前后进行处理。
    • 提供事件机制,重要环节会触发事件,通知Listener处理。
    • 提供消息机制,在主流程完成时发布消息,提供事务外异步处理机制。
    • 根据环境变量、配置参数可以include外部类,exclude默认类。

元数据加载流程

元数据加载主要分为两个阶段:元数据定义阶段、元数据阶段,通过实现不同接口,可以进行功能扩展。 元数据定义是元数据的原材料,经过加工可以转换成元数据。

应用场景

主要用于微服务化的数据查询、持久化和数据转换处理,例如:CRUD、导入导出,还提供任务调度、邮件、HTTP、代码生成等能力。

  • 适用于服务器端开发
    • 基于关系型数据库的应用
    • 基于No-Sql的应用
    • 基于基于关系型数据库、No-Sql、远程服务的混合型微服务架构应用
  • 集成微服务框架
    • Rest:Spring Cloud
    • RPC:Dubbo

核心组件

  • 元数据Metadata:Component、Interface、Entity、Property、DataType、Enumeration
  • 接口:*MetaBean、*MetaAware,用于默认实现和扩展开发
  • 事件通知:*Listener、*Event,用于扩展开发
  • 仓库:*Registry
  • 帮助类:*Walker、KeyIterator、Objectlizer
  • CRUD:*SqlBuilder、*Service、QuerySchema
  • 入口:MetaBeanFactory、TplBeanFactory
  • 代码生成:*Builder、*Func
  • 自动配置:*AutoConfig
  • 解析器:*Parser、*Node、*Tree

核心概念

用户模型 UserModel

电子商城用户模型示例

类图

统计分析

用户模型中的静态类图可以认为是iMeta所需的原材料,基于此原材料生成元数据。
用户模型通常包含以下几个UML元素:包、类、属性、关系。关系主要描述类间关系,有继承、实现、关联、组合。
iMeta结合数据仓库模型,能够提供极为灵活的统计查询,一般情况下,无需一行JAVA代码。

    • 订单Order与订单明细OrderDetail为组合关系,订单Order与买家Customer、订单明细OrderDetail与商品Goods间为关联关系。
    • has-a (Association), contains-a (Composition)
    • 组合是一种关系更加紧密的关联关系,重点是关系强弱和对象生命周期;
    • 对于0..1的组合与关联无法准确区别时,考虑删除引用对象时,被引用对象是否同时消失,如果是,就是组合关系,否则是关联关系。
  • 泛化/继承 vs 实现
    • 泛化/继承 vs 实现

    • 商品分类GoodsCate与档案Archive间为继承关系,商品分类GoodsCate与树型接口Tree间为实现关系。
    • is-a (Generalization), comply-with (Realization)
    • 继承和实现基于M2层编程时,除了校验规则并没有明显区别;在基于M1层(即用户模型层)编程时,继承和实现区别很大。
    • 两者语义不同,继承基类用于划分类型体系,实现接口用于规定行为准则/协议;
      • 在扩展性方面,实现一般优于继承,不同的实现类可以灵活替换,但继承有类型体系的含义,无法随意扩展子类。
      • 开闭原则中对修改关闭、对扩展开放,核心就是面向接口编程,使用精简的接口抽象公共行为/准则/协议。
    • 元数据定义 MetadataDefinition

 

元数据 Metadata

域 Domain

域是对应用所属领域的抽象,域用于隔离不同的应用,域的隔离策略有:不隔离、单实例不同库、服务隔离,域的隔离级别(IsolationLevel)目前有三种:远程服务、缓存服务、本地服务,通过隔离策略决定域的隔离级别。
iMeta中域在组件(Component)上声明,组件为最小的部署单元。

域隔离级别

隔离策略相同域不同域
不隔离本地服务/缓存服务本地服务/缓存服务
单实例本地服务(跨库)/缓存服务本地服务(跨库)/缓存服务
服务隔离本地服务/缓存服务远程服务

隔离级别通过*Profile来确定,可以自定义MetaProfile。远程服务隔离级别设置在Property上,缓存服务隔离级别设置在Classifer上,本地服务隔离级别不用设置,但可能修改数据库表名。

对于远程服务和缓存服务隔离级别,需要在Classifier的service中设置访问方式,以供相应驱动使用。在Classifer的service属性中,可以指定明确的访问方式。

#服务协议格式
协议:驱动://服务器信息/数据源?参数列表
# 远程服务协议
service="remote:dubbo://<username>:<password>@<server>:<port>/<registry>?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://<username>:<password>@<server>:<port>/<database>?key=cbo.goods.Goods&subkey=id&type=hash&…"
service="cache:redis://1?key=cbo.goods.Goods&subkey=id&type=hash&…"
service="cache:es://<url>?p1=v1&…"
service="cache:mongo://<url>?p1=v1&…"

服务协议很多项不用设置,使用上下文中环境变量即可。如果什么都不设置,使用默认处理程序。缓存服务最好明确配置协议和驱动及关键参数。

用户模型与元数据的映射

用户模型元数据模型示例
Componentorder,goods
包间依赖Component.dependencies
基本类型DataTypeInteger,DateTime,String
枚举类型EnumerationOrderStatus
实体EntityOrder,OderDetail,Goods
接口InterfaceCode,Autditable
组合关系Aggregation(V2)/Association(V1) type="composition"Order -> OrderDetail
关联关系通过类型推断OrderDetail -> Goods
继承关系GeneralizationGoods -> Archive
实现关系RealizationOrderBase -> Auditable
属性Propertycode,details,createTime
方法Operation
方法参数Parameter

说明

  • 关联关系推断:属性的数据类型为复杂类型时,属性所属类型与属性数据类型间为关联关系。
  • 组合关系是一种关系强烈的关联关系。
  • V2中使用Aggregation不使用Composition的原因是:1. Composition的缩写容易与Component混淆; 2. Aggregation取自聚合根的含义,而非UML中的聚合关系。

查询方案

查询方案为统一查询引擎对外开发的唯一数据结构,所有的查询配置都要遵守查询方案的定义。

应用模式

所有操作视角都统一到模型层,大多数应用模式仅依赖配置文件即可完成所有开发任务。

统一查询引擎

iMeta提供了统一查询引擎,将远程服务、缓存服务、本地服务的数据查询统一,实现细节对开发人员透明,所有操作视角都统一到模型层面,实现基于微服务的模型驱动开发;一般情况下,无需一行JAVA代码。

详细内容 查询引擎参考手册

统一持久化

iMeta提供了统一持久化机制,包括单实体持久化、组合实体持久化、批量新增,并提供了主外键设置、唯一性校验、数据合法性校验、默认值设置等默认规则;一般情况下,无需一行JAVA代码。

详细内容 持久化参考手册

统一DTS

iMeta提供了统一的数据转换服务,主要包括数据导出导出到Excel、csv文件;一般情况下,无需一行JAVA代码。

详细内容 DTS参考手册

代码生成和数据渲染

iMeta提供了一套模版解析引擎,提供支持设计态根据元数据生成代码和支持运行时渲染数据两种功能。

iMeta提供了一套模版解析引擎,提供支持设计态根据元数据生成代码和支持运行时渲染数据两种功能。

详细内容 模版参考手册

零JAVA代码

iMeta提供了一个简洁快速的imeta-boot-starter-service模块,仅仅通过配置文件,即可完成应用程序开发,一般情况下,无需一行JAVA代码。

详细内容 零JAVA代码参考手册

集成WebFlux

iMeta可以快速集成Spring WebFlux反应式编程框架,一般用于任务调度、路由分发、No-Sql数据库数据存储。

 

如果觉得本文对你有帮助,欢迎点赞,欢迎关注我,如果有补充欢迎评论交流,我将努力创作更多更好的文章。欢迎大家订阅我后续会抽空将之前挖的坑满满填上,最近工作实在是有点多忙不过来各位粉丝见谅

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/106733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

判断非线性负载是否合格的方法可以从以下几个方面进行考虑:

额定功率容量&#xff1a;需要了解负载设备的额定功率容量&#xff0c;根据负载设备的规格和说明书&#xff0c;确定其额定功率容量是否能够满足实际需求&#xff0c;如果超过了负载设备的额定功率容量&#xff0c;可能会导致设备过载&#xff0c;从而影响其正常运行。 电压波形…

JVM 垃圾回收机制(可达性分析、引用计数)

目录 1 什么是垃圾2 为什么需要回收3 哪些对象被判定为垃圾呢3.1 引用计数法3.2 可达性分析算法&#xff1a;GC Roots根 1 什么是垃圾 垃圾是指在运行程序中没有任何指针指向的对象&#xff0c;就是需要被回收的。 2 为什么需要回收 执行程序会不断地分配内存空间&#xff0c…

分布式事务协调中间件---seata快速入门

分布式事务 Seata&#xff0c;之前叫做Fescar&#xff0c;是一个开源的分布式事务解决方案&#xff0c;它主要致力于提供高效和简单的分布式事务服务。Seata主要用于解决微服务架构下的数据一致性问题。 Seata 的基本原理是基于两阶段提交 (2PC) 以及三阶段提交 (3PC)&#xff…

nodejs+vue水浒鉴赏平台系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

C++ 反向迭代器

反向迭代器的即正向迭代器的--&#xff0c;反向迭代器的--即正向迭代器的&#xff0c;反向迭代器和正向迭代器的很多功能都是相似的&#xff0c;因此我们可以复用正向迭代器作为反向迭代器的底层容器来封装&#xff0c;从而实现出反向迭代器&#xff0c;即&#xff1a;反向迭代…

【LeetCode 算法专题突破】双指针(⭐)

文章目录 前言1. 移动零题目描述代码 2. 复写零题目描述代码 3. 快乐数题目描述代码 4. 盛最多水的容器题目描述代码 5. 有效三角形的个数题目描述代码 6. 三数之和题目描述代码 7. 四数之和题目描述代码 总结 前言 学算法入门必学的一个章节&#xff0c;双指针算法&#xff0…

计算机网络-计算机网络体系结构-数据链路层

目录 *一、组帧 1.1字符计数法 1.2字符填充法 1.3零比特填充法 1.4违规编码 *二、差错控制 2.1检错编码 2.2.1奇偶校验码 2.2.2 CRC循环冗余码 2.2纠错编码-海明码 *三、流量控制和可靠传输机制 流量控制 停止-等待协议 ​编辑 后退n帧协议的滑动窗口(GBN) 选择…

ChatGPT AIGC 制作大屏可视化分析案例

第一部分提示词prompt: 商品 价格 p1 13 p2 41 p3 42 p4 53 p5 19 p6 28 p7 92 p8 62 城市 销量 北京 69 上海 13 南京 18 武汉 66 成都 70 你现在是一名非常专业的数据分析师,请结合上述数据完成下列几件事情 1:第一部分数…

基于 Triple 实现 Web 移动端后端全面打通

*作者&#xff1a;陈有为&#xff0c;陌陌研发工程师、Apache Dubbo PMC RPC 协议开发微服务 在我们正常开发微服务的时候&#xff0c;传统 RPC 服务可能在最底层。上层可能是浏览器、移动端、外界的服务器、自己的测试、curl 等等。我们可能会通过 Tomcat 这种外部服务器去组…

机器视觉知识讲的深不如讲的透

我深思这个话题&#xff0c;大家来培训&#xff0c;其实培训机构也很痛苦&#xff0c;每个热掌握的参差不齐&#xff0c;你说他不会吧&#xff0c;会一点电气&#xff0c;你说他会吧&#xff0c;会一点Opencv&#xff0c;会一点visionpro,会一点Visionmaster,会一点Halcon。好像…

【Retinex theory】【图像增强】-笔记

1 前言 retinex 是常见的图像增强的方法&#xff0c;retinex 是由两个单词合成的&#xff1a;retina conrtex &#xff0c;即视网膜皮层。 2 建立的基础 Land 的 retinex theory 建立在三个假设之下&#xff1a; 真实世界是无色的&#xff0c;我们所谓的颜色是光和物质相互…

上位机在自动化中有何作用和优势?

今日话题 上位机在自动化中有何作用和优势&#xff1f; 自动化控制编程领域包括单片机、PLC、机器视觉和运动控制等方向。输入“777”&#xff0c;即刻获取关于上位机开发和数据可视化的专业学习资料&#xff0c;近年来&#xff0c;上位机编程逐渐兴起&#xff0c;正在逐步替…

【Linux】环境下部署Nginx服务 - 二进制部署方式

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

Linux网络编程系列之服务器编程——非阻塞IO模型

Linux网络编程系列 &#xff08;够吃&#xff0c;管饱&#xff09; 1、Linux网络编程系列之网络编程基础 2、Linux网络编程系列之TCP协议编程 3、Linux网络编程系列之UDP协议编程 4、Linux网络编程系列之UDP广播 5、Linux网络编程系列之UDP组播 6、Linux网络编程系列之服务器编…

将license验证加入到系统中

1.将ClientDemo下的cn文件夹的内容导入项目对应的java目录下。 2.将license-config.properties文件导入resources目录下。 3.在项目的pom.xml中添加如下依赖。 <properties><!-- Apache HttpClient --><httpclient>4.5.5</httpclient><!-- License…

MySQL 4 MySQL使用演示(包含基本操作命令~~~)MySQL5.7编码设置

目录 1 MySQL的使用演示&#xff08;8.0和5.7版本对比&#xff09; 1、查看所有的数据库 2、创建自己的数据库 3、使用自己的数据库 4、查看某个库的所有表格 5、创建新的表格 6、查看一个表的数据 7、添加一条记录 8、查看表的创建信息 9、查看数据库的创建信息 …

关于Vue+webpack使用unocss编写CSS,打包后CSS没加前缀

关于Vuewebpack使用unocss编写CSS&#xff0c;打包后CSS没加前缀&#xff0c;封装了一个插件去解决了这个问题 unocss-postcss-webpack-plugin unocss在vite中使用配置&#xff0c;关于unocss在vite中使用&#xff0c;自行查阅官网 https://unocss.dev/integrations/vite ,vi…

【LeetCode】24. 两两交换链表中的节点

1 问题 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4] 输出&#xf…

Lua在计算时出现非法值,开启Debugger之后不再触发

1&#xff09;Lua在计算时出现非法值&#xff0c;开启Debugger之后不再触发 2&#xff09;从Gamma空间改为Linear空间会导致性能下降吗 3&#xff09;EXR格式在Unity中如何优化 4&#xff09;安卓游戏启动后提示“应用程序异常” 这是第355篇UWA技术知识分享的推送&#xff0c;…

基于VScode 使用plantUML 插件设计状态机

本文主要记录本人初次在VScode上使用PlantUML设计 本文只讲述操作的实际方法&#xff0c;假设java已安装成功 。 1. 在VScode下安装如下插件 2. 验证环境是否正常 新建一个文件夹并在目录下面新建文件test.plantuml 其内容如下所示: startuml hello world skinparam Style …