软件架构设计(六) 软件架构风格-MDA(模型驱动架构)

概念

模型驱动架构MDA, 全称叫做Model Driven Architecture。

  • Model:表示客观事物的抽象表示
  • Architecture:表示构成系统的部件,连接件及其约束的规约
  • Model Driven: 使用模型完成软件的分析,设计,构建,部署和维护等 开发活动

MDA起源于分离系统规约和平台实现的思想。之前我们在净室软件工程中也提到过这种思想。

在这里插入图片描述

意思就是我们开发一个系统,基本上跟那个数学公式一样,我们从始至终都通过证明来证明它的正确性,而不是通过测试来被动发现问题。

所以在净室软件工程这种思想之下,推动了模型驱动架构的思想。

基本思想

我们一开始建立起模型,再一步步把这个模型映射,生成代码就得到我们最终需要的软件系统。

当然,事实证明,纯粹按这种思想完成这种系统的话,有一定的难度,会面临一些困难。比如业务逻辑是绕不开的,但是一部分去使用这个思想是没有问题的。

比如目前的可视化操作就已经在应用了,比如我们的mybatis generator就可以帮我们生成浙这些代码。这些其实就是按照模型映射生成的代码。

再比如我们通过模板语法生成对应的controller,service,mapper和前端代码增删改查这类似的功能,也是我们的模型驱动架构。

其实模型驱动架构可能跟现在的低代码平台思想也有着千丝万缕的联系。

主要目标

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

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

相关文章

stable diffusion实践操作-复制-清空-保存提示词

系列文章目录 stable diffusion实践操作 stable diffusion实践操作-webUI教程 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、右上生成图标附近按钮介绍1. 箭头介绍(复现别人的…

视频汇聚/视频云存储/视频监控管理平台EasyCVR启动时打印starting server:listen tcp,该如何解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,可实现视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、H.265自动转码H.264、平台级联等。为了便于用户二次开发、调用与集成,…

JSON是什么?认识 json

目录 一 Json定义 二 Json语法规则 三 json 的代码演示 一 Json定义 轻量级的文本数据交换格式具有自我描述性【看到某个Json数据就能知道它的特点】比xml传输速度快【跨平台】 二 Json语法规则 (1)语法 两种数据结构:对象和数组 大括号…

FlinkCDC 菜鸟教程-文章目录

系列文章目录 背景篇 环境篇 准备一台已经安装了 Docker 的 Linux 或者 MacOS 电脑。准备教程所需要的组件版本对应关系安装环境检查 工具篇 flinkkibana 概念篇 Docker 介 绍Docker Compose 介 绍Kibana介 绍 实践篇 演示: Mysql CDC 导入 Elasticsearch 启动服务准备…

数据结构与算法学习(day3)——快速排序

文章目录 前言复习冒泡排序时遇到的问题快速排序 前言 (1)在本章的学习此前,需要复习前一章的内容,动手敲一遍解题。上一章讲的是冒泡排序算法,我在回顾的时候重新敲了一遍重新,就发了一些问题,…

极客时间:数据结构与算法之美【学习笔记+思考实践】

本篇是 《极客时间:数据结构与算法之美》课程的学习笔记和带有自己的一些思考实践。原文学习链接如下:https://time.geekbang.org/column/intro/100017301 开篇词 | 从今天起,跨过“数据结构与算法”这道坎01 | 为什么要学习数据结构和算法&a…

java面试题-spring与mybatis框架面试题

spring与mybatis框架面试题 面试官:Spring框架中的单例bean是线程安全的吗? 候选人: 嗯! 不是线程安全的,是这样的 当多用户同时请求一个服务时,容器会给每一个请求分配一个线程,这是多个线程会…

Qt6中使用Qt Charts

官方文档:Qt Charts 6.5.2 如果你是使用 CMake 构建的,则应在 CMakeLists.txt 中添加如下两行代码: find_package(Qt6 REQUIRED COMPONENTS Charts)target_link_libraries(mytarget PRIVATE Qt6::Charts) 其中 mytarget 为你的项目名称。一共…

SpringBoot初级开发--服务请求(GET/POST)所有参数的记录管理(8)

服务端在定位错误的时候,有时候要还原现场,这就要把当时的所有入参参数都能记录下来,GET还好说,基本NGINX都会记录。但是POST的请求参数基本不会被记录,这就需要我们通过一些小技巧来记录这些参数,放入日志…

vue打包的基层原理

npm run build 的原理是利用 Vue CLI 的构建工具,根据项目中配置的各种规则,将源代码转换成可在浏览器中运行的静态文件。 npm run build 主要做了以下几个操作: 读取项目配置:根据项目中的配置文件,如 vue.config.js&…

天津web前端培训班 前端是否适合零基础学?

随着HTML 5和ECMAScript 6的正式发布,大量的前端业务逻辑,极大地增加了前端的代码量,前端代码的模块化、按需加载和依赖管理势在必行,因此Web前端越来越被人们重视。 Web前端的就业前景 Web前端开发工程师薪资持续走高&#xff…

Spring MVC实现RESTful

在 Spring MVC 中,我们可以通过 RequestMapping PathVariable 注解的方式,来实现 RESTful 风格的请求。 1. 通过RequestMapping 注解的路径设置 当请求中携带的参数是通过请求路径传递到服务器中时,我们就可以在 RequestMapping 注解的 val…

小红书下一个爆款趋势锁定 | 秋冬种草指南

今夏「多巴胺」风靡全网,现秋日又捎来一股名为「美拉德」的风……俨然一副“新晋顶流”的架势。 如何抓住这一新趋势?本期千瓜将锁定小红书下一个爆款内容——「美拉德」,剖析笔记与底层逻辑,助力品牌洞见先机,运筹布…

uniapp 高度铺满全屏

问题&#xff1a;在有uni-tabbar的情况下&#xff0c;页面铺满剩下的部分 <template><view :style"{height:screenHeightpx}" class"page"></view> </template> <script>export default {data() {return {screenHeight: &q…

长胜证券:主板或以震荡整理为主 结构性行情持续

长胜证券指出&#xff0c;技术面看&#xff0c;沪指3150点上方谨慎看多&#xff0c;缩量横盘整理代表强势&#xff0c;向上打破需市场放量且权重配合&#xff0c;后市若打破并站稳3230点可视为强势回转行情开启&#xff0c;考虑到短期人民币弱势格局&#xff0c;主板或以震动整…

山东企业ITSS认证条件

申请ITSS认证的条件 1、ITSS认证一级升级为定量级应满足以下基本条件&#xff1a; 具有独立的法人资格; 运维服务能力体系已根据运维服务能力成熟度的一级特征和关键指标建立&#xff0c;并已有效运行六个月以上; 能够提供运营和维护服务的管理、人员、资源、技术和流程的有…

【PCL-11】提取平面上层的目标物,剔除平面下层目标物

因项目需求,需提取平面上的物体,不提取平面下的物体,尝试采用超体聚类+LCCP分割的方式,但由于上层点云模型一侧有空洞,导致分割效果不理想。 这里采用pcl::ExtractPolygonalPrismData类,实现平面上物体的提取。 pcl::ExtractPolygonalPrismData类是通过设定处于同一平面模…

力扣(LeetCode)算法_C++——字母异位词分组

给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出: [[“bat”],[“nat”,“tan”…

电脑入门: 路由器初学者完全教程

路由器初学者完全教程 本文以Cisco2620为例,讲述了路由器的初始化配置以及远程接入的配置方法,探讨了如何使用内部网络的DHCP服务功能为远程拨入的用户分配地址信息以及路由器常见故障的排除技巧。 (本文假定Cisco2620路由器为提供远…

React三属性之:props

作用 将父组件的参数传递给子组件 父组件 import ./App.css; import React from react; import PropsTest from ./pages/propsTest class App extends React.Component{render(){return(<div><h2>App组件</h2><PropsTest obj{{name:王惊涛,age:27}}>…