杨氏框架的自动代码功能


承蒙朋友们抬爱,把这个框架命名为杨氏框架,那我就不客气了。我起的英文名字,大家记住,Yangs Frame。

现在杨氏框架在师弟师妹的努力下已经日趋完善,也已经在项目中开始使用。可是我知道我们的框架当然需要有很多提高的地方,所以这里我要提出一些新的要求。

  1. 框架的发展
    杨氏框架将在下面的方向进行发展,或者说经历下面的几个阶段:

    • 前台和后台代码的自动生成功能(这也是我这篇文章将要说明的)
    • 系统程序的模块化(如果第一步能够实现,那么第二步将会很容易了)
    • 提升效率(包括数据库连接资源池、数据的缓存、数据库的并发以及全局变量的使用等)

    等上面的三部分基本都实现了,那么框架就很成熟了

  2. 自动代码功能
    之所以要提这个功能,是因为我觉得杨氏框架还不够智能。如果一个数据表的结构改变,那么首先我们要修改数据库,同时要修改前台页面,还要修改后台生成sql语句的类。工作量是巨大的。所以我希望能够引入配置文件的功能,从而实现代码的自动生成。

    • 实现架构
      架构图如图1所示:这里我假定的是理想情况,不需要做任何修改,那么使用E-R图生成的Sql语句和XML是绝对一致的。SQL语句用来生成数据库,XML文件用来生成前台页面和后台代码,所以三者之间是高度一致的。

      图1 自动代码架构图

      图1 自动代码架构图

    • 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+.........

    这个的过程基本就是这样的,其实并不难。

  3. 这样做的好处
    • 易于开发,不用前台后台不停的核对了,我们只需要编写XML文件即可
    • 易于维护,当某一个功能升级后,我们只需要修改XML即可(对于小的改动)
    • 一致性,前台和后台高度一致(因为都来自于XML文件),因此出错可能性小。

    当然可能也会有一些缺点,容后讨论。

差不多就是这样,写出来供大家参考。


版权信息:本文来自老杨个人网站,作者老杨原文地址,转载请注明出处。

如果喜欢本站,敬请订阅:老杨个人网站。谢谢惠顾!


分类: 信息技术
标签: , , , , , , , , , ,

前40排已经被占了我要占座

  1. 你今儿晚上打算讲这个?话说我看得有点点晕。

    回复Ta

    看来有点失败啊

    回复Ta

    真的听不懂耶

    回复Ta

    相信我,听不懂是正常的

  2. 前排围观。

    回复Ta

    刚讲完,感觉不太成功

    回复Ta

  3. 还好啦,大部分思想都听懂了。不过有好些东西我还没学,所以建设性意见就提不出来喽~
    你说的那个数据库的install和update让我想起了数据库里的undo和redo操作……你从哪儿来的启发啊?

    回复Ta

    没什么启发,就是胡思乱想的

    回复Ta

  4. 嗯嗯,一般这种情况就该合起双手说你很牛了。咳咳,不过我就不说,接着胡思乱想吧~

    回复Ta

    你要拜佛么?

    回复Ta

  5. 要拜也得等你再长胖点儿啊

    回复Ta

    呃,再胖就真要成佛了

    回复Ta

  6. 博士终于亮出了绝活。

    回复Ta

    也不是什么绝活了,一点想法而已

    回复Ta

    不是绝活,是个人想法,那也是一绝。

    回复Ta

    呃,好吧,这是我的绝活

    回复Ta

  7. 不错,杨氏的,哈哈。

    回复Ta

    哈,只要是杨氏的就不错,哈哈

    回复Ta

  8. 老杨,每次看你的文章都觉得你是我们八零后的骄傲,加油呀。

    回复Ta

    呃,这个压力很大啊,我尽量努力吧

    回复Ta

  9. 配置文件应该提供一个IDE根据数据库结构自动生成。

    回复Ta

    我想这样,但是不知道去哪里找合适的IDE

    回复Ta

  10. 我已经不怎么搞开发了

    回复Ta

    我这个专业不搞开发不行啊

    回复Ta

  11. 翔子来看你了 老杨!

    回复Ta

    谢谢。昨天博客主机出问题了,今天刚好的

    回复Ta

  12. 看看这框架

    回复Ta

    呃,希望你能看懂

    回复Ta

  13. 杨氏 框架?

    你老杨 我小杨 哈。 :emotion57

    回复Ta

    嗯?咱们是本家?

    回复Ta

    恩,呵呵 :emotion563

    回复Ta

  14. :emotion533
    愣是没看懂.

    回复Ta

    呃,没看懂就对了,术业有专攻嘛

    回复Ta

  15. 杨氏框架?呵呵第一次听说。研究下

    回复Ta

    呃,估计你研究不通,因为是我们自己写的框架。如果效果好的话,我会考虑开源的

    回复Ta

  16. =好可以好可以
    比我做的网站好!

    回复Ta

  17. 好可以在这个中国有你这样的人,我们感到高兴!

    回复Ta

    说实话,没太搞明白你说的话是什么意思

    回复Ta

  18. ^_^,我最近也在搞这个。不过还没开始。居然和你的思路是完全一致的,不过我是在asp.net中研究。我现在xml的配置都搞好了。只是觉得实际结果可能并没有那么好。
    比如表单提交的页面:如果用表格设计,表单应该有几列?字段中有字典数据(下拉框)关联到数据库的另一张表你如何定义好去自动搜索,而且还要考虑配置文件属性不应该过多,这样只会增加团队人员的学习成本,刚开始觉得实现起来其实很简单,后来仔细想想发现问题还是很多的,所以放弃了一段时间。不过最近决定重新开始了。
    短期我是这样想的:通用的表单提交和分页列表全部自动生成,只需要维护配置文件即可,每个页面page load的时候传入数据库的表名就自动前台控件和脚本,分页和提交全部采用ajax。表单提交页面的样式布局和字段排序应该也是可配置的。不过这只是最通用的情况,加入权限判断之后可能就更复杂了。

    回复Ta

    对于ASP.NET的情况,我还不是特别了解,我们前台生成的表单准备全部用div来实现,然后用css来控制样式,这样灵活一些。
    另外有一个安全问题,你要考虑,就是这样配置数据库的结构必然明文出现在xml文件中,所以要做一些工作。
    另外你说的权限,我们是使用过滤器实现的,这个和整个框架没有冲突。不知道aspx有没有这种类似的功能,你可以找一下

    回复Ta

:emotion58 :emotion57 :emotion563 :emotion562 :emotion561 :emotion560 :emotion56 :emotion559 :emotion558 :emotion557 :emotion556 :emotion554 :emotion552 :emotion551 :emotion550 :emotion55 :emotion547 :emotion546 :emotion544 :emotion543 :emotion542 :emotion541 :emotion540 :emotion54 :emotion539 :emotion538 :emotion537 :emotion536 :emotion535 :emotion534 :emotion533 :emotion532 :emotion531 :emotion530 :emotion53 :emotion529 :emotion526 :emotion525 :emotion524 :emotion523 :emotion522 :emotion521 :emotion520 :emotion52 :emotion519 :emotion518 :emotion517 :emotion516 :emotion515 :emotion514 :emotion513 :emotion512 :emotion511 :emotion510 :emotion51 :emotion119 :emotion113