MDD:使用模型驱动开发方式进行快速开发(多图预警)
相信很多人跟我一样,不喜欢数据展示、列表分页、数据的增、删、改、查,这种简单又烦琐的搬砖活。
所以网上出现很多开源的代码生成工具,在多年前我也写过,根据模版生成简单的View、Action、Service、Dao、Bean;但实际上并没有太大变化,代码生成太死板。不是所有表单数据都可以用input[type='text']来输入的,增删一个字段是要改4人的。
多年以后我尝试用模型驱动开发,基于配置来实现各种各样的功能,控件丰富且一键调用;废话不多说,下面详细介绍
假设需要进行图书管理、图书分类、图书借阅记录;最终要的效果如下图:
数据展示与排版,是不是让人觉得很直观。不同的数据操作,功能键在数据上边。再来看下表单:
这里边有五种控件:单行文本框、多行文本框、日期控件、文件上传控件,还有一个隐藏控件指向图书类型ID(由于列表左边已选择“语文”类型,在添加图书信息时会自动识别)
在这里您不用写一行代码,系统也不会生成一行代码。您信吗?但不管您信不信,事实就是如此。
在这里有三表数据库表:图书分类、图书信息、借阅记录。(实际上要再加一个分类与图书的多对多表会更友好些,这里为了尽量缩小篇幅省略)
1、图书分类
2、图书信息
3、借阅记录
这三个表的关联关系是借阅记录->图书信息->图书分类;其中图书分类是树型结构数据。
进入LINGX模型驱动开发平台的在线开发工具
点击“创建”-"创建表对象",出现下图:
选择之前创建的数据库表“图书信息”[toa_book]
平台会自动读取“图书信息”[toa_book]表的所有字段,连注释也会一起取出;在这里注释至关重要的,在生成对象模型时注释会变成字段名;同时也让人养成一种建表要注释的习惯。
给模型取名字,点击“确定”后生成对象模型。如下图:
将需要模型功能写入功能树
这里面的功能,前三是自动生成的方法模型;之后是平台默认实现的方法模型,点击“预览”
在这里已经可以对图书信息增删改查,外加分页、查询、高级查询、导出功能。这仅仅是平台最基础的功能。由于默认情况下每个字段的输入控件都是input[type='text']。所以要设置字段所需的控件
这里对“出版日期”进行了“日期控件”设置
这是各个字段设置好输入控件后预览,数据列表及添加表单功能。
这个图书信息对象模型就建立好了,可以挂在菜单下,就可以对其进行图书信息的管理;但我们要的还远远不止是这个,还要图书分类、借阅记录。
用以上的方法建立图书分类与借阅记录两个模型,因为图书分类是树型结构。所以表字段必须要包含fid字段。fid字段要指向自身模型
注意其中的两个属性:输入控件(dialogtree树型对话单选框)与指向对象模型(自身表名即模型代码),在这里补充图书信息的"隶属分类"字段【指向对象模型】为图书类别,借阅记录的"隶属图书"字段【指向对象模型】为图书信息,这样三者之间就建立了外键关联关系。
然后在对象里分别指定“级联对象”属性,如下图:
其中图书类型的级联对象为JSON对象,具体是:[{name:'图书信息',entity:'toa_book',method:'grid_cascade',rule:''}]
而图书信息中的级联对象为借阅记录的对象代码:toa_book_record。
到这里已经完成了三个对象模型的配置工作,现在只差把功能挂在菜单之下,进入“系统管理”-“菜单管理”,如下图:
到这里已经全部完成。在这里可能并没有完全展示所有的操作细节,有些人会看不明白。这些都没关系有视频介绍一步都没落下:http://pan.baidu.com/s/1cG89FC
这就是模型驱动开发的魅力,但我觉得我这平台已经超越了模型驱动开发MDD达到领域驱动开发DDD,因为在业务模型(执行器)中可以调用系统的所有资源及任意业务嵌套;
不知道有没有说清楚,欢迎各位同学拍砖交流。
MDD:使用模型驱动开发方式进行快速开发(多图预警)的更多相关文章
- vivo浏览器的快速开发平台实践-总览篇
一.什么是快速开发平台 快速开发平台,顾名思义就是可以使得开发更为快速的开发平台,是提高团队开发效率的生产力工具.近一两年,国内很多公司越来越注重研发效能的度量和提升,基于软件开发的特点,覆盖管理和优 ...
- 如何基于Winform开发框架或混合框架基础上进行项目的快速开发
在开发项目的时候,我们为了提高速度和质量,往往不是白手起家,需要基于一定的基础上进行项目的快速开发,这样可以利用整个框架的生态基础模块,以及成熟统一的开发方式,可以极大提高我们开发的效率.本篇随笔就是 ...
- 快速开发 jQuery 插件的 10 大技巧(转)
1. 把你的代码全部放在闭包里面 这是我用的最多的一条.但是有时候在闭包外面的方法会不能调用.不过你的插件的代码只为你自己的插件服务,所以不存在这个问题,你可以把所有的代码都放在闭包里面.而方法可能应 ...
- 基于代码生成器的快速开发平台 JEECG
JEECG是一款基于代码生成器的J2EE快速开发平台,开源界“小普元”超越传统商业企业级开发平台.引领新的开发模式(Online Coding模式(在线开发)->代码生成器模式->手工ME ...
- Serverless 初体验:快速开发与部署一个Hello World(Java版)
昨天被阿里云的这个酷炫大屏吸引了! 我等85后开发者居然这么少!挺好奇到底什么鬼东西都是90.95后在玩?就深入看了一下. 这是一个关于Serverless的体验活动,Serverless在国内一直都 ...
- Java开发学习(二十七)----SpringMVC之Rest风格解析及快速开发
一.REST简介 REST(Representational State Transfer),表现形式状态转换,它是一种软件架构风格 当我们想表示一个网络资源的时候,可以使用两种方式: 传统风格资源描 ...
- arcpy+PyQt+py2exe快速开发桌面端ArcGIS应用程序
前段时间有一个项目,大体是要做一个GIS数据处理工具. 一般的方法是基于ArcObjects来进行开发,因为我对ArcObjects不太熟悉,所以就思考有没有其他简单快速的方法来做. 在查看ArcGI ...
- 快速开发Grunt插件----压缩js模板
前言 Grunt是一款前端构建工具,帮助我们自动化搭建前端工程.它可以实现自动对js.css.html文件的合并.压缩等一些列操作.Grunt有很多插件,每一款插件实现某个功能,你可以通过npm命名去 ...
- winform快速开发平台->让有限的资源创造无限的价值!
最近一直在维护一套自己的快速开发平台. 主要应对针对C/S架构下的项目.然而对winform这快,还真没有看到过相对好的快速开发平台, 何为快速,在博客园逛了了好久, 预览了很多通用权限管理系统. 确 ...
随机推荐
- android CVE 漏洞汇总
arm exploits 技术教程: Learning Pentesting for Android Devices CVE-2015-1530 ,CVE-2015-1474 两个android整数溢 ...
- exit() _exit() 函数区别
exit(): --stdlib.h (1) 所有使用atexit()注册的函数,将会被以注册相反的顺序调用: (2) 所有打开的输出流被刷新,并且关闭流: (3) 使用tmpfile()创建的文件将 ...
- jQuery 中的 unbind() 方法
jQuery 中的 unbind() 方法是 bind() 方法的反向操作,从每一个匹配的元素中删除绑定的事件. 语法结构: unbind([type][, data]); type是事件类型,dat ...
- MYSQL表中向SET类型的字段插入值时值之间不能有空格
MYSQL 中有一种数据类型是 SET,首先我们查看一个包含 SET 类型字段的表结构: 接下来我们向表中插入数据: 按照上面的语句插入数据发现报错了,于是去掉了插入值之间的空格,然后插入成功:
- html添加新元素兼容和访问
<!DOCTYPE html> <html> <head> <title>Creating an HTML Element</title> ...
- 什么是Java内存模型(JMM)
什么是java内存模型 缓存一致性问题 在现代计算机中,因为CPU的运算速度远大于内存的读写速度,因此为了不让CPU在计算的时候因为实时读取内存数据而影响运算速度,CPU会加入一层缓存,在运算之前缓存 ...
- HDU-5273
Dylans loves sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/ ...
- JMX monitor weblogic 总结
https://blog.csdn.net/joy_91/article/details/42774839
- 基于node的前端页面实时更新。呦吼~
学习了gulp,webpack后越发觉得前端开发万分的有趣,首当其冲的就是解决了狂按f5的尴尬. 当我们按下ctrl+s保存后页面自动更新了,我就觉得我f5键在隐隐的发笑. 1.node_npm_li ...
- php5.5 安装
1.php安装 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo yum install zl ...