最近在项目中遇到一个问题,数据库中有很多张需要由人手工维护的基本数据表,而这些数据表每一个都需要人工对其中的数据进行维护。在开发的过程中发现基本上每个页面需要做的控件相差不大,区别在于不同的界面对应的表和字段不同,而基本的代码处理流程是一至的,所以这就促使我想到能不能有更好一点的办法简化这个开发过程。
用户界面层,我们最重点的是用户操作界面的控件要和数据库的字段匹配,在开发过程中还有,如果数据库的字段有变化的话代码修改越少越好。所以最好ui可以根据数据库的字段自动生成相应的控件。
业务层,可能会做一些基本的数据校验之类的工作,由于在需求中重点是ui和数据库访问所以业务层的功能应该会相对简单一些。
数据库访问层,在数据库的操作语句中我们也需要知道数据库的字段,以此生成增删改查的语句。
在这里我打算使用配置文件来进行配置。
在这里我也想到过可以通过dao来获得数据库的字段和字段类型,但是转念一想再数据库中我们很多时候可能会使用一样的sql类型来存储不一样的数据类型,比如使用varchar可以存储字符串,但是也有人使用varchar存储枚举型数据,可能不同的人会使用不同的控件显示对应同一个sql数据类型。所以这里我打算适当的使用一些配置来对ui显示数据的控件进行配置。
想到这里,在配置文件中就需要有这样一些配置项,1.数据库的字段。2.这个字段可以是用什么样地数据类型存储的3.在界面上是用什么控件来展示的。
这里我打算使用java来做开发,但是这种思想我觉得其他任何语言都是可以考虑使用的。所以如果读者们有什么意见的话也可以一起交流。
下一步是要对配置文件进行定型了。
2014-03-20
配置结构则需要考虑什么控件需要在界面上展示,怎么样展示,目前还是比较简单的控件只是输入文本的。
由于在每个界面上都有的保存,删除等的按钮,所以就添加一个的通用界面吧,当然直接在jframe上画开始也可以。
import javax.swing.jframe;import javax.swing.jpanel;import javax.swing.jtextfield;import java.awt.borderlayout;import javax.swing.jbutton;import java.util.treemap;
public class projectform extends jframe{ public string namestring; public jpanel panel ; public treemap textfieldlist = new treemap(); public projectform() { panel = new jpanel(); getcontentpane().add(panel, borderlayout.center); panel.setlayout(null); jpanel panel_1 = new jpanel(); panel_1.setbounds(82, 5, 265, 33); panel.add(panel_1); jbutton btnnew = new jbutton(new); panel_1.add(btnnew); jbutton btnsave = new jbutton(save); panel_1.add(btnsave); jbutton btnclear = new jbutton(clear); panel_1.add(btnclear); jbutton btndelete = new jbutton(delete); panel_1.add(btndelete); }}
在生成的时候根据不同的表名向上添加控件。import java.io.file;import java.util.list;import javax.swing.jlabel;import javax.swing.jtextfield;import org.jdom2.*;import org.jdom2.input.saxbuilder;
public class formcreator { static projectform createform(string name) { projectform form = new projectform(); form.namestring = name; string filename = d:\\work eclipse\\1.xml; int topx = 20; int topy = 80; int labelwidth = 100; int labelheight = 15; int gapy = 30; int textwidth = 300; try { saxbuilder builder = new saxbuilder(); org.jdom2.document document; file file = new file(filename); document = builder.build(file); element rootelement = document.getrootelement(); list tablelist = rootelement.getchildren(); for (int i = 0; i < tablelist.size(); i++) { element node = tablelist.get(i); string tnamestring = node.getattribute(name).getvalue(); if(!tnamestring.equalsignorecase(name)) { continue; } list tablefeilds = node.getchildren(); for(int j=0;j