`
chenlang_soft
  • 浏览: 4125 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

基于模型的编程辅助工具--CodeHelper

阅读更多

 

Codehelper简介

                                  --基于模型的编程辅助工具

      Codehelper的目标是为开发者提供一个工具,辅助其以更快的速度来得到代码。Codehelper以模型为中心来实现这个目标。下面发布几张解图来了解一下其概貌。如要下载演示代码请访问:http://code.google.com/p/fastcoder/downloads/list

<!---->1、  <!---->构建模型

<!----><!----><!---->

在本工具中,模型是实现快速开发的基础。一切工作都是从模型的构建开始的,以模型构建为中心。除了具备建模工具的基本要素之外,我觉得本工具的建模功能中比较重要的一个特点就是对修饰词的管理。修饰词,帮助使用者在模型上做各种标记,这些标记在以后的代码生成和ui自动生成上具有重要的作用。

<!---->2、  <!---->引进模型

<!----><!----><!---->

除了自己从头创建模型,本工具支持从数据库中引入模型。但是需要指出的是,通常情况下,从数据库引入的信息只是一些基本的信息,对于准确的生成代码是不充分的。因为数据库系统的元数据并不考虑模型在代码生成中的用途。所以引入之后通常需要使用者补充必要的信息。

此外,为了能够从更多的来源引入模型,本工具在引入功能上设置了一个扩展点,通过这个扩展点,使用者可以把自己的引入逻辑挂接在本工具上,从而将其它形式的模型信息引入本工具中。

 

<!---->3、  <!---->模型基因

<!----><!----><!---->

可以参照Java接口的概念来理解模型基因。作为一种范型,模型基因描述了某一个模型应该具备的特征。与接口的不同之处在于,模型基因除了规范的作用,同时还是代码生成的逻辑,或者代码生成的模板。例如数据基因中定义了5个接口,当添加到模型之后,就会为该模型添加这5个方法的具体实现,下面看一段生成的代码示例:

/**

     *查询函数,以json格式返回

     *@param qxml String:查询字符串

     *@param start int:开始索引

     *@param limit int:结束索引

     *@return String

     */

    public static String queryByPage(String qxml, int start, int limit) {

        /*startqueryByPage*/

        String s = "";

        String total = "5";

        Connection conn = DBConnection.getConnection();

        String wsql = XMLUtil.where_str(qxml);

        try {

            String csql = "select count(*) as num from yuangong";

            if (!wsql.equals("")) {

                csql = csql + " where " + wsql;

            }

            PreparedStatement cstmt = conn.prepareStatement(csql);

            ResultSet crs = cstmt.executeQuery();

            if (crs.next()) {

                total = crs.getInt("num") + "";

            }

            crs.close();

            cstmt.close();

            s = s + "{'totalCount':'" + total + "','datas':[";

            String sql = "select yuangong.uuid,yuangong.label,yuangong.nianling,yuangong.zhiwei,yuangong.bumen,(select label from bumen where bumen.uuid=yuangong.bumen) as bumenlabel from yuangong ";

            if (!wsql.equals("")) {

                sql = sql + " where " + wsql;

            }

            Statement stmt = conn.createStatement();

            ResultSet rs = stmt.executeQuery(sql);

            int i = 0;

            int from = start;

            int to = start + limit - 1;

            while (rs.next()) {

                if (i > to) {

                    break;

                }

                if (i >= from) {

                    if (i > from) {

                        s = s + ",";

                    }

                    s = s + "{'uuid':'" + rs.getString("uuid") + "'";

                    s = s + ",'label':'" + rs.getString("label") + "'";

                    s = s + ",'nianling':'" + rs.getString("nianling") + "'";

                    s = s + ",'zhiwei':'" + rs.getString("zhiwei") + "'";

                    s = s + ",'bumen':'" + rs.getString("bumen") + "'";

                    s = s + ",'bumenlabel':'" + rs.getString("bumenlabel") + "'";

                    s = s + "}";

                }

                i++;

            }

            s = s + "]}";

            rs.close();

            stmt.close();

            conn.close();

        } catch (Exception e) {

            e.printStackTrace();

        } finally {

            try {

                conn.close();

            } catch (Exception e) {

            }

        }

        return s;

    /*endqueryByPage*/

}

<!---->4、  <!---->建模和代码编辑的双向同步

工具中实现了简单的代码和建模之间的双向同步功能。使用“同步”按钮,可以为选定的模型生成代码。使用“源码”按钮,切换到Java代码编辑器查看生成的代码,并可以修改(注意,这种修改是有限制的),然后可以将修改的结果反向同步的模型中。刚才我说修改是受限制的,指的是,使用者无法修改函数名和参数,也无法修改函数体前面的注视,只能修改函数体里面的代码。这也是出于以后的代码自动化的需要,以后的代码自动生成过程中,对这些接口的调用是根据模型基因中的规范来的,如果允许使用者修改函数名和参数的话,则调用这些接口的地方会产生冲突。

<!---->5、  <!---->基于模型的生成算法的扩展点

本工具中,模型作为生成代码的基础,在别的模块中使用。同时,本工具在此处设置了扩展点,使用者可以在此挂接自己需要的生成逻辑。例如基于模型生成Hibernate需要的配置文件和对象的功能。

<!---->6、  <!---->基于ExtJsWebUI设计器

先看一下概貌:

<!----><!----><!---->

这是一个所见即所得的ui开发工具。帮助使用者开发ext前端应用。

 

<!---->7、  <!---->基于模型的UI开发助手

这是一个很能体现模型的作用的地方。通过模型提供的信息,可以快速的构建UI界面。

<!----><!----><!---->

 

大家看一下这个窗口,里面列举了很多可以添加到ui界面中的ui元素,向form,grid,tree等等。这些元素都是使用特定的算法,根据模型中的信息,准备的很完整的ui元素,拖放到UI界面上就可以使用的,包括所需要的js脚本,后台的java服务及对服务的调用,都会随着使用者的拖动鼠标的动作添加到ui模型中。希望大家赶紧下载示例代码体验一下。

最后再强调一点:提供这些元素的算法也是可以扩展的。这使得本工具在满足不同的使用者的生成不同风格、场景的代码方面,也具备足够的灵活性。只要你愿意,本工具绝对可以帮助你减轻写代码中的重复劳动。

<!---->8、  <!---->UI设计器和代码之间的双向同步

使用者可以随时将UI Designer中的编辑同步到源码中,使用Ctrl+D快捷方式,可以进行双向的同步。使用者可以在代码试图中修改UI界面上的控件的属性,也可以根据自己的需要添加js代码,这些会同步到ui模型中。

<!---->9、  <!---->单表和主从表向导

生成单表维护和主从表维护界面,来看一张截图:

<!----><!----><!---->

<!---->10、              <!---->脚本助手

本工具提供智能编程助手。在设计UI的时候就有一个这样的助手,可以帮助使用者快速添加js代码。先看一下外观:

<!----><!----><!---->

在编程助手窗口中,列出了助手为您准备的代码片断,双击一个选项,可以将该代码片断放入剪切板中,下面这段js就是编程助手自动准备的:

var grd7=Ext.getCmp("mygrid");

var d7=grd7.getStore().getCurrentRecord().get("id");

window.showModalDialog('','../bumen/bumen.editView.jsp');

这是一段实现双击grid中的一行弹出编辑界面的脚本。有了这样的编程助手,您可以省却编写js的工作量。虽然目前的编程助手只能为您准备这些实现控件之间的数据流动的代码,但是拥有了这个基础,使用者可以进一步丰富其功能,也可以通过网络获得我们的服务功能,是编程助手拥有更丰富的功能。

<!---->11、              <!---->图形化的Java代码开发

本工具提供的另外一个功能,可视化的java代码开发。看一下截图:

<!----><!----><!---->

这个功能我就不详细介绍了。只说一点,对于使用者来说,这个功能也是可以扩展的。通过提供自己的代码翻译器,使用者可以实现自己需要的图形表示,得到自己想要的代码。工具中提供了基本的实现:如方法调用、循环、判断、开关及常量、变量、参数、返回值的实现,目前支持生成javajs代码。欢迎有兴趣的同学下载示例体验一下。

  • 大小: 122.2 KB
  • 大小: 207 KB
  • 大小: 35.6 KB
  • 大小: 179.4 KB
  • 大小: 153.8 KB
  • 大小: 31.8 KB
  • 大小: 141 KB
  • 大小: 147.9 KB
分享到:
评论
6 楼 honlin 2008-12-04  
关注ing,我一直都对模型辅助设计和开发感兴趣!
5 楼 chenlang_soft 2008-12-02  
svn不太熟,忙活了变天,代码也没有放上去
4 楼 chenlang_soft 2008-12-01  
欢迎浏览我的新贴:http://www.iteye.com/topic/283686
3 楼 chenlang_soft 2008-11-30  
key232323 写道

不错,为什么大家都在写代码生成工具??5555

大家有相同的想法好啊,这样不会寂寞。常来,啊
2 楼 key232323 2008-11-28  
不错,为什么大家都在写代码生成工具??5555
1 楼 chenlang_soft 2008-11-28  
好冷清啊,欢迎大家讨论啊

相关推荐

Global site tag (gtag.js) - Google Analytics