`
xinglijun1973
  • 浏览: 55012 次
社区版块
存档分类
最新评论

谈在代码中嵌入标记生成模版

阅读更多
  • 问题提出

通过将代码抽取出模版,再通过模版生成代码,极大的提高代码生成的效率。但随着代码的优化,模版也需要不断的人工优化。那么,能不能在代码修改后,模版自动更新呢?以及能否提供一些方法自动生成模版和调用模版的代码呢?

 

  • 方案提出

定义一组生成模版的标记,然后在代码中嵌入这些标记(为了不影响代码运行,必须以注释的方式),根据标记的指示生成模版。因为是根据嵌入的标记生成模版的,所以模版可以反复自动生成。代码优化后,重新生成模版即可。

 

  • 实现

1)定义一组生成模版的标记。

2)开发能够解释这些的标记的程序。

3)在代码中嵌入这些标记

4)生成模版

 

为形象说明,下面举例。

一段sql语句(您需要熟悉etl才能读懂):

   DECLARE GLOBAL TEMPORARY TABLE temp_cr_member
     (
        member_id  INT GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1) ,
        member_code VARCHAR(28),  
        member_name VARCHAR(50),
        m_code3 VARCHAR(20),
        memo VARCHAR(4)
      ) WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED IN temp_usertmp_32;

 

下面为嵌入了标记之后的sql语句:

   DECLARE GLOBAL TEMPORARY TABLE temp_cr_member
     (
        member_id  INT GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1) ,
        --<list temp-sourcecols > 可以抽取出一个list 类型的 名字为temp-sourcecols的模版参数
        --<element>
        member_code --element-name
        VARCHAR(28) --elment-type
        --</element> 定义list中的元素如何构成 
        , --<cat/>元素各字段用什么符号连接
        member_name VARCHAR(50),
        m_code3 VARCHAR(20),
        memo VARCHAR(4)
        --</list>
      ) WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED IN temp_usertmp_32;

 

根据代码中嵌入的注释形式的标记,生成的模版:

DECLARE GLOBAL TEMPORARY TABLE temp_cr_member
     (
        member_id  INT GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1) ,
        <#list col in  temp-sourcecols > 
          <#col.name> <#col.type> ${cat}
        </#list>
     ) WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED IN temp_usertmp_32;
    

 

调用这个模版生成代码时候,传入下面的参数

temp-sourcecols=[{name:member_code,type:varchar(28)},{name:member_name,type:varchar(50)},{name:m_code3,type:varchar(20)},{name:memo,type:varchar(4)}], cat=","

 ,即可生成上面的代码片段。

传入参数

temp-sourcecols=[{name,varchar(28)},{age,number},{sex,varchar(20)},{memo,varchar(4)}]

 

则可生成的代码如下:

   DECLARE GLOBAL TEMPORARY TABLE temp_cr_member
     (
        member_id  INT GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1) ,
        name VARCHAR(28),  
        age number,
        sex VARCHAR(20),
        memo VARCHAR(4)
      ) WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED IN temp_usertmp_32;
      

      

更多的嵌入示例参看附件createjgmem.sql和使用模版生成代码的示意gencode_demo_createjgmem.txt

 

  • 延伸
通过在代码中以注释形式嵌入标记,不影响原来程序运行。对这些标记进行解释,不仅可以自动的持续的生成模版,而且可以生成调用模版的代码。实际上是一种将代码抽取为模版的一个自动化的重构过程。
  • 缺陷

嵌入,要以人工的形式进行。需要对代码特别清楚,能够根据代码在大脑有模版的轮廓,需要具备一定的模型抽象能力,这对人提出一定的要求。

 

  • 改进

给出若干相似代码实例,机器能否自动抽取出模版?这可能是机器学习研究的课题。

 

  • 附件

嵌入示例createjgmem.sql

使用模版生成代码的示意 gencode_demo_createjgmem.txt

 

1
0
分享到:
评论

相关推荐

    在Vuejs中使用带标记的模板字符串

    - 我们同样可以在方法中使用模板字符串,然后在模板中通过`v-on`事件监听器调用这个方法。 - 示例: ```javascript methods: { generateContent() { return `${this.someText}&lt;/button&gt;`; }, doSomething() ...

    精通代码生成器XDoclet.doc

    XDoclet 是一个通用的代码生成实用程序,继承了 JavaDoc 引擎的思想,允许根据定制 JavaDoc 标记生成代码和其他文件。它允许您使用象 JavaDoc 标记之类的东西来向诸如类、方法和字段之类的语言特征添加元数据。随后...

    基于JAVA的一个能按照模板和配置去生成结果的通用生成器框架.zip

    在软件开发中,模板引擎允许开发者使用特定的语法在模板文件中嵌入动态数据,然后根据这些数据生成最终的输出,如HTML、XML或其他文本格式。常见的Java模板引擎有FreeMarker、Velocity和Thymeleaf等。这种框架可能...

    js代码-标记的模板字符串

    在JavaScript的世界里,模板字符串(Template literals)是一种非常实用的特性,它允许我们在字符串中嵌入表达式,并且可以方便地处理多行文本。本文将深入探讨JavaScript中的模板字符串,特别是带标签的模板字符串...

    简单实用的ASP生成html代码

    5. **HTML模板**:ASP代码会嵌入到一个HTML模板中,该模板定义了页面的结构和样式。 6. **输出到HTML**:使用`Response.Write`命令将处理后的数据写入HTML响应中。 7. **保存为文件**:可能包含代码,用于将生成的...

    asp生成html模板完整可用版.rar

    在ASP中,开发者可以使用VBScript或JScript等脚本语言编写代码,服务器在接收到客户端请求后,会执行这些脚本并生成HTML内容,然后发送到客户端浏览器显示。 首先,我们需要理解ASP的基本结构。一个ASP页面通常以....

    C#生成html静态页面示例

    在ASP.NET中,.aspx文件是包含HTML标记和服务器端代码的模板文件,这些代码在服务器上执行后生成HTML,然后发送到客户端浏览器。 在给定的压缩包中,有以下几个关键文件: 1. **Default.aspx** 和 **MoBan.aspx**...

    T4模版实例代码

    在T4模板中,可以定义和使用参数来传递值到模板中,这些参数可以在模板的代码块中被引用,以实现动态生成内容。例如,你可以定义一个参数表示类名,然后在模板中根据这个参数生成对应的类定义。 下面是一个简单的T4...

    源代码-模板操作初级入门类 v1.0.0.zip

    在IT行业中,源代码是构建软件的基础,而模板操作则是高效开发的一种常见手法。这个"源代码-模板操作初级入门类 v1.0.0.zip"压缩包显然为初学者提供了一个学习模板操作的起点。ASP(Active Server Pages)是微软开发...

    网页界面设计,APP界面设计自动生成Html代码工具

    HTML(超文本标记语言)是构建网页的基础,而HTML5则是其最新的版本,增加了许多新的元素和功能,如音频和视频嵌入、离线存储、更好的表单控制等,极大地丰富了网页的展示形式和交互性。WEBUI(Web用户界面)设计...

    仿京东全套jsp模板

    在仿京东模板中,HTML文件用于构建各种页面的基本框架,如首页、购物车、订单页面等,通过标记语言组织内容和链接。 3. **CSS (Cascading Style Sheets)**:CSS用于美化HTML元素的呈现效果,包括颜色、字体、布局等...

    Html5协议模板,alipay协议+weibo协议

    在这个案例中,这两个协议模板可能包含了与支付宝和微博接口交互的基本代码框架,以及对应的样式和布局设计,让开发者可以更轻松地将支付和社交功能集成到自己的网站或应用中。 总结来说,这个HTML5协议模板提供了...

    JSP网页模板JSP网页模板JSP网页模板

    3. **脚本元素**:包括`&lt;scriptlet&gt;`, `&lt;expression&gt;`, 和`&lt;declaration&gt;`,它们允许在JSP页面中嵌入Java代码,分别用于执行逻辑、输出表达式结果和声明变量。 4. **JSP动作标签**:如`&lt;jsp:include&gt;`, `...

    模板引擎资料包.zip

    - EJS:简单易用,支持在模板中直接写JavaScript代码。 - Mustache:逻辑less的模板引擎,遵循“逻辑向数据,模板向HTML”的原则,有多种语言实现。 - Django模板语言:Python Web框架Django内置的模板引擎,功能...

    aspx页面网站模板

    在ASPX页面中,开发者可以使用C#或VB.NET等.NET支持的语言编写代码,这些代码被嵌入到HTML标记中,通过服务器控件和数据绑定技术实现动态内容的生成。 网站模板的核心价值在于其可重用性和灵活性。"很好用的网站...

    TemplateEngin(模板引擎(标签解析)示例源码).

    `from.gif`可能是一个示例页面使用的图像资源,展示如何在模板中嵌入静态资源。 `.sln`和`.suo`文件是Visual Studio的解决方案和用户选项文件,`.sln`存储了项目结构和依赖关系,而`.suo`包含了用户特定的设置和...

    ASP.NET源码——asp.net生成静态页面的模板引擎.zip

    模板引擎在Web开发中扮演着重要角色,它允许开发者使用标记语言将内容与设计分离,提高开发效率并优化网站性能。 首先,我们需要理解什么是模板引擎。模板引擎是一种工具,它能够解析含有特殊指令的文本模板,并将...

    html.rar_html页面_java 静态模板_java 静态页面_java生成html_静态页面

    JSP则允许开发者在HTML中嵌入Java代码,服务器在接收到请求后会将JSP转换为Servlet,然后生成HTML响应。这种方式使得开发者可以在后端处理业务逻辑,同时在前端呈现结果。 5. **静态页面的优势**:静态页面加载速度...

    Codesmith 模板 数据层

    Codesmith支持使用CST(CodeSmith Template)语言,这是一种基于XML的标记语言,允许你在模板中嵌入C#代码片段。 总的来说,Codesmith数据层模板提供了一套完整的解决方案,从数据访问到业务逻辑,覆盖了数据库操作...

Global site tag (gtag.js) - Google Analytics