表单自定义系统的架构设计

zhangxf 2005-08-19 06:26:21
表单(页面)自定义(webwork+spring+hibernate)

(1)采用一个页面解析引擎,通过查找界面元素定义表(这个表后面有定义,也可以是xml定义),获得
对应页面的元素信息,采用xslt来生成html界面。
上面提到的数据表(或者xml文件)用来管理页面元素和对应的数据表结构字段信息以及页面元素的表现
控件类型。

比如:
表单名 数据表名 列标实 列名称 数据类型 页面控件 数据来源
----------------------------------------------------------------------------------------
VendorA TBL_Vendor cVenCode 供应商编号 字符串 Text 无
VendorA TBL_Vendor cVenName 供应商名称 字符串 Text 无
VendorA TBL_Vendor bDist 地区性 布尔值 CheckBox 无
CustomQ TBL_Custom cCusCode 客户名称 字符串 Option ***.jsp

另外还需要一张数据内容管理的表
比如:
表单名 数据表名 文档标实 列标实 值
---------------------------------------------------------
VendorA TBL_Vendor docA cVenCode 001
VendorA TBL_Vendor docA cVenName 中国移动
VendorA TBL_Vendor docA bDist true
CustomQ TBL_Custom docQ cCusCode 中国联通

这样的一种方法,会带来数据后台的管理非常的困难,因为本来字段级的数据变成了记录级,DBA的管理
会非常困难,数据重用性大大降低,多字段更新也是一个无法解决的问题!

(2)数据表结构还是由表来定义,但数据结构通过用户表单自定义启用而动态生成(生成物理表结构,当然
生成的表名需要有一定的数字规范,同时对应的PO,hbm.xml一并生成),程序中采用java的reflect来处理
生成的物理文件并进行页面显示;有一个前提,表单一旦定义完成后就不允许修改(表单定义后,有个启用
的过程),如果需要,只能重新定义表单 ,这样数据的管理还是比较方便的。但同样这里也带来一个问题
(其实第一种方法也存在),如果某个表单删除后,数据将永远得不到表现了!也就是说,我们的数据表现
完全是通过表单来实现的(依赖于表单),但这样显然有不足之处,表单仅仅是一个表现的载体,持久数据
应该是不随界面而发生改变的.
针对以上两种情况,应该如何来作到统一和规范,符合表单自定义的规范呢?

ps.第二中方法,后来经过考虑有很多欠佳的表现,所以基本可以不予讨论,可以对第一种方法进行重点讨论,
主要是对数据内容的管理!
...全文
1223 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangxf 2005-08-24
  • 打赏
  • 举报
回复
针对第一种情况,大家再展开的讨论一下,我认为还是有问题的!!!
我想听听大家目前通用和比较优秀的做法和思路,谢谢
禽兽v5 2005-08-24
  • 打赏
  • 举报
回复
你定义了表单,但没有考虑数据的绑定?这个部分才是最麻烦的。需要一整套逻辑。
禽兽v5 2005-08-24
  • 打赏
  • 举报
回复
表单(页面)自定义(webwork+spring+hibernate)
----------
webwork+spring派不上用场。

(1)采用一个页面解析引擎,通过查找界面元素定义表(这个表后面有定义,也可以是xml定义),获得
对应页面的元素信息,采用xslt来生成html界面
----------
用xml出界面,慢死你,要想在界面中加代码,程序员也要高级的,成本高死你。
mxlmwl 2005-08-24
  • 打赏
  • 举报
回复
的确,数据绑定是很麻烦的,可以用xml+xsl来搞,不过xsl学习成本太高,很难调试。你可以基于html的dom结构,自定义几个标签,用正则来实现。这是目前很多主流CMS的做法。你也可以参考php的template。
其实,velocity等就差不多是这种做法,效率很高,甚至比jsp还要快。

不过也没楼上说的那么难,只要定义一套自己的规则,然后去实现,其实也蛮轻松的。

通常的做法就是第二种。不过 TurboCMS 以前版本用的是第二 种方法,不知道现在改了没有。xml现在是主流,对于这种动态字段拥有绝对的灵活性,所以第一种绝对比第二种要好。
mxlmwl 2005-08-23
  • 打赏
  • 举报
回复
第二种方法根本就不可行,这样做的局限性要远远比第一种差很多。
第一种方法,象你所说的,的确,是字段级变成了一个字段,这个字段里存xml格式的数据。
我觉得这没什么太大的关系,更新字段的时候,就把所有字段都重新拼成xml,再存放到这个字段里好了。只是要想按字段来查询的话的确有些麻烦,甚至有些变态,呵呵。不过这种情况就建议你用全文检索来做了,不要用数据库的查询。再说本身用数据库的查询效率也不高。如果google也那么搞的话,早就关门歇业了。建议你用lucene来实现。
dcross 2005-08-22
  • 打赏
  • 举报
回复
我觉得用hibernate来做自定义是件很不爽的事情,如果要做自定义,我觉得还是jdbc来实现更方便快捷,而且灵活性大。

50,545

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧