杨氏框架的自动代码功能
承蒙朋友们抬爱,把这个框架命名为杨氏框架,那我就不客气了。我起的英文名字,大家记住,Yangs Frame。
现在杨氏框架在师弟师妹的努力下已经日趋完善,也已经在项目中开始使用。可是我知道我们的框架当然需要有很多提高的地方,所以这里我要提出一些新的要求。
- 框架的发展
杨氏框架将在下面的方向进行发展,或者说经历下面的几个阶段:- 前台和后台代码的自动生成功能(这也是我这篇文章将要说明的)
- 系统程序的模块化(如果第一步能够实现,那么第二步将会很容易了)
- 提升效率(包括数据库连接资源池、数据的缓存、数据库的并发以及全局变量的使用等)
等上面的三部分基本都实现了,那么框架就很成熟了
- 自动代码功能
之所以要提这个功能,是因为我觉得杨氏框架还不够智能。如果一个数据表的结构改变,那么首先我们要修改数据库,同时要修改前台页面,还要修改后台生成sql语句的类。工作量是巨大的。所以我希望能够引入配置文件的功能,从而实现代码的自动生成。- 实现架构
架构图如图1所示:这里我假定的是理想情况,不需要做任何修改,那么使用E-R图生成的Sql语句和XML是绝对一致的。SQL语句用来生成数据库,XML文件用来生成前台页面和后台代码,所以三者之间是高度一致的。 - XML文件
XML文件的结构应该如下所示(仅供参考)<?xml version="1.0" ?> <tables> <table name="UserData"> <column name="UserName" type="text" unique="true" empty="false" NickName="姓名"> <column name="PassWord" type="text" unique="false" empty="false" NickName="密码"> <column name="Sex" type="bit" options="Male|Female" values="0|1" NichName="性别"> <column name="Dept" type="Table:Department:PID|DeptName" NickName="部门"> ................. </table> .................. </tables>
其中的name和数据库表中的某一列的列名,数据类型,是否唯一,是否为空都需要定义。另外NickName指的是别名,用来在前台Form表单进行显示。为了保证效率,可以在Tomcat运行时就将该XML文件载入内存,存放在全局变量中,这样前台和后台都可以直接使用。
- 前台代码(所有的代码都是伪代码,我现在已经退化到不会写代码了)
前台代码我想采用自定义标签的形式,前台调用方式会很简单:<MyTag:Autoform tablename="UserData" />
后台处理的Java程序也并不难,但是可能会复杂,因为要考虑的情况很多:
this.tablename=tablename;//get which form you want to generate autoform.getTable(tablename);//get the table info from the xml stored in Memory as Application variable out.print("<form name= action= method=>"); for(i=1; i<autoform.columnnumber;i++) { if(column[i].type="text") { out.print(column.nickname+"<input name=\""+column.name+"\" >");//generate the form code } ..................// } out.print("</form>");
- 后台代码
后台代码页会非常简单,在我们为一个实体Bean设置完属性后(setProperty),就可以使用另外的函数来生成插入,修改还是删除它的Sql语句了。XML=Application.XML;//get the xml file stored in Memory this.tablename=tablename; Table=getTable("Tablename"); String InsertSQL="insert into "+tablename; for(i=1; i<autoform.columnnumber;i++) { InsertSQL=InsertSQL+"(column[i].name"+","); } InsertSQL=InsertSQL+this.username+.........
这个的过程基本就是这样的,其实并不难。
- 实现架构
- 这样做的好处
- 易于开发,不用前台后台不停的核对了,我们只需要编写XML文件即可
- 易于维护,当某一个功能升级后,我们只需要修改XML即可(对于小的改动)
- 一致性,前台和后台高度一致(因为都来自于XML文件),因此出错可能性小。
当然可能也会有一些缺点,容后讨论。
差不多就是这样,写出来供大家参考。
版权信息:本文来自老杨个人网站,作者老杨,原文地址,转载请注明出处。
如果喜欢本站,敬请订阅:老杨个人网站。谢谢惠顾!
标签:






你今儿晚上打算讲这个?话说我看得有点点晕。
回复Ta
前排围观。
回复Ta
还好啦,大部分思想都听懂了。不过有好些东西我还没学,所以建设性意见就提不出来喽~
你说的那个数据库的install和update让我想起了数据库里的undo和redo操作……你从哪儿来的启发啊?
回复Ta
嗯嗯,一般这种情况就该合起双手说你很牛了。咳咳,不过我就不说,接着胡思乱想吧~
回复Ta
要拜也得等你再长胖点儿啊
回复Ta
博士终于亮出了绝活。
回复Ta
不错,杨氏的,哈哈。
回复Ta
老杨,每次看你的文章都觉得你是我们八零后的骄傲,加油呀。
回复Ta
配置文件应该提供一个IDE根据数据库结构自动生成。
回复Ta
我已经不怎么搞开发了
回复Ta
翔子来看你了 老杨!
回复Ta
看看这框架
回复Ta
杨氏 框架?
你老杨 我小杨 哈。
回复Ta
愣是没看懂.
回复Ta
杨氏框架?呵呵第一次听说。研究下
回复Ta
=好可以好可以
比我做的网站好!
回复Ta
好可以在这个中国有你这样的人,我们感到高兴!
回复Ta
^_^,我最近也在搞这个。不过还没开始。居然和你的思路是完全一致的,不过我是在asp.net中研究。我现在xml的配置都搞好了。只是觉得实际结果可能并没有那么好。
比如表单提交的页面:如果用表格设计,表单应该有几列?字段中有字典数据(下拉框)关联到数据库的另一张表你如何定义好去自动搜索,而且还要考虑配置文件属性不应该过多,这样只会增加团队人员的学习成本,刚开始觉得实现起来其实很简单,后来仔细想想发现问题还是很多的,所以放弃了一段时间。不过最近决定重新开始了。
短期我是这样想的:通用的表单提交和分页列表全部自动生成,只需要维护配置文件即可,每个页面page load的时候传入数据库的表名就自动前台控件和脚本,分页和提交全部采用ajax。表单提交页面的样式布局和字段排序应该也是可配置的。不过这只是最通用的情况,加入权限判断之后可能就更复杂了。
回复Ta