相信很多人跟我一样,不喜欢数据展示、列表分页、数据的增、删、改、查,这种简单又烦琐的搬砖活。

所以网上出现很多开源的代码生成工具,在多年前我也写过,根据模版生成简单的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:使用模型驱动开发方式进行快速开发(多图预警)的更多相关文章

  1. vivo浏览器的快速开发平台实践-总览篇

    一.什么是快速开发平台 快速开发平台,顾名思义就是可以使得开发更为快速的开发平台,是提高团队开发效率的生产力工具.近一两年,国内很多公司越来越注重研发效能的度量和提升,基于软件开发的特点,覆盖管理和优 ...

  2. 如何基于Winform开发框架或混合框架基础上进行项目的快速开发

    在开发项目的时候,我们为了提高速度和质量,往往不是白手起家,需要基于一定的基础上进行项目的快速开发,这样可以利用整个框架的生态基础模块,以及成熟统一的开发方式,可以极大提高我们开发的效率.本篇随笔就是 ...

  3. 快速开发 jQuery 插件的 10 大技巧(转)

    1. 把你的代码全部放在闭包里面 这是我用的最多的一条.但是有时候在闭包外面的方法会不能调用.不过你的插件的代码只为你自己的插件服务,所以不存在这个问题,你可以把所有的代码都放在闭包里面.而方法可能应 ...

  4. 基于代码生成器的快速开发平台 JEECG

    JEECG是一款基于代码生成器的J2EE快速开发平台,开源界“小普元”超越传统商业企业级开发平台.引领新的开发模式(Online Coding模式(在线开发)->代码生成器模式->手工ME ...

  5. Serverless 初体验:快速开发与部署一个Hello World(Java版)

    昨天被阿里云的这个酷炫大屏吸引了! 我等85后开发者居然这么少!挺好奇到底什么鬼东西都是90.95后在玩?就深入看了一下. 这是一个关于Serverless的体验活动,Serverless在国内一直都 ...

  6. Java开发学习(二十七)----SpringMVC之Rest风格解析及快速开发

    一.REST简介 REST(Representational State Transfer),表现形式状态转换,它是一种软件架构风格 当我们想表示一个网络资源的时候,可以使用两种方式: 传统风格资源描 ...

  7. arcpy+PyQt+py2exe快速开发桌面端ArcGIS应用程序

    前段时间有一个项目,大体是要做一个GIS数据处理工具. 一般的方法是基于ArcObjects来进行开发,因为我对ArcObjects不太熟悉,所以就思考有没有其他简单快速的方法来做. 在查看ArcGI ...

  8. 快速开发Grunt插件----压缩js模板

    前言 Grunt是一款前端构建工具,帮助我们自动化搭建前端工程.它可以实现自动对js.css.html文件的合并.压缩等一些列操作.Grunt有很多插件,每一款插件实现某个功能,你可以通过npm命名去 ...

  9. winform快速开发平台->让有限的资源创造无限的价值!

    最近一直在维护一套自己的快速开发平台. 主要应对针对C/S架构下的项目.然而对winform这快,还真没有看到过相对好的快速开发平台, 何为快速,在博客园逛了了好久, 预览了很多通用权限管理系统. 确 ...

随机推荐

  1. android CVE 漏洞汇总

    arm exploits 技术教程: Learning Pentesting for Android Devices CVE-2015-1530 ,CVE-2015-1474 两个android整数溢 ...

  2. exit() _exit() 函数区别

    exit(): --stdlib.h (1) 所有使用atexit()注册的函数,将会被以注册相反的顺序调用: (2) 所有打开的输出流被刷新,并且关闭流: (3) 使用tmpfile()创建的文件将 ...

  3. jQuery 中的 unbind() 方法

    jQuery 中的 unbind() 方法是 bind() 方法的反向操作,从每一个匹配的元素中删除绑定的事件. 语法结构: unbind([type][, data]); type是事件类型,dat ...

  4. MYSQL表中向SET类型的字段插入值时值之间不能有空格

    MYSQL 中有一种数据类型是 SET,首先我们查看一个包含 SET 类型字段的表结构: 接下来我们向表中插入数据: 按照上面的语句插入数据发现报错了,于是去掉了插入值之间的空格,然后插入成功:

  5. html添加新元素兼容和访问

    <!DOCTYPE html> <html> <head> <title>Creating an HTML Element</title> ...

  6. 什么是Java内存模型(JMM)

    什么是java内存模型 缓存一致性问题 在现代计算机中,因为CPU的运算速度远大于内存的读写速度,因此为了不让CPU在计算的时候因为实时读取内存数据而影响运算速度,CPU会加入一层缓存,在运算之前缓存 ...

  7. HDU-5273

    Dylans loves sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/ ...

  8. JMX monitor weblogic 总结

    https://blog.csdn.net/joy_91/article/details/42774839

  9. 基于node的前端页面实时更新。呦吼~

    学习了gulp,webpack后越发觉得前端开发万分的有趣,首当其冲的就是解决了狂按f5的尴尬. 当我们按下ctrl+s保存后页面自动更新了,我就觉得我f5键在隐隐的发笑. 1.node_npm_li ...

  10. php5.5 安装

    1.php安装 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo yum install zl ...