惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
博客园_首页
H
Help Net Security
WordPress大学
WordPress大学
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
B
Blog
I
InfoQ
SecWiki News
SecWiki News
T
Tailwind CSS Blog
Spread Privacy
Spread Privacy
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
Vulnerabilities – Threatpost
N
Netflix TechBlog - Medium
P
Palo Alto Networks Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Vercel News
Vercel News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
K
Kaspersky official blog
M
MIT News - Artificial intelligence
S
Schneier on Security
T
Threat Research - Cisco Blogs
F
Fortinet All Blogs
Cyberwarzone
Cyberwarzone
Scott Helme
Scott Helme
aimingoo的专栏
aimingoo的专栏
Martin Fowler
Martin Fowler
MyScale Blog
MyScale Blog
The Cloudflare Blog
Recent Announcements
Recent Announcements
Security Latest
Security Latest
G
GRAHAM CLULEY
IT之家
IT之家
Y
Y Combinator Blog
The Last Watchdog
The Last Watchdog
腾讯CDC
Google DeepMind News
Google DeepMind News
V
V2EX
S
Securelist
TaoSecurity Blog
TaoSecurity Blog
B
Blog RSS Feed
S
SegmentFault 最新的问题
博客园 - 叶小钗
P
Proofpoint News Feed
云风的 BLOG
云风的 BLOG
Project Zero
Project Zero
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
F
Full Disclosure

博客园 - 未未

用vsstudio 设计Winform 高分屏上布局错乱的问题 探寻路径 jsonToxml 通过LL型方法实现(C#)[源] 数据类型和Json格式[zt] 繁星代码生成器开源 (源代码) 繁星查询分析器 代码生成器 架构提取工具-tqdemo SyCODE Syntax Highlighter javascript语法高亮引擎 代码生成工具的分类及比较 模板语法规则说明 繁星代码生成器0.91版 【视频】 0.9版-繁星代码生成器 转:C#开源资源大汇总 代码生成原则Top10 我的系分之路 你必须知道的10种国产编程语言 揭秘正则表达式 我的lxfRegex现实[源] 有关调试的方法 [源码]C# to SQL 的翻译器.net 1.1版
自动代码生成和VBA脚本
未未 · 2009-05-22 · via 博客园 - 未未

   这里说的自动代码生成专指从数据库结构->代码,这种需要在O/R Mapping中是必不可少的,包括Entity Class和Xml Mapping File的生成,在以数据库为中心的开发中(尤其是MIS),自动代码生成可以起到快速开发,易于维护的作用。我有非常长的一段时间不再执行拼接SQL语句的操作了,因为对于row的操作,我都通过EntityManager实现,而rowset的操作,我是通过一种折衷的方法去实现的(具体可以参考我的SinoLib)。

    代码自动生成我目前所知有两种方法,一种是模板,一种是脚本,模板方法比较常见些,而且可以满足绝大多数情况的需要,通过插入一些自定义的TAG,再用程序来解析;而脚本执行的方法就是非常灵活和强大的,因为很多时候,需求是很古怪特殊的,所以普通的模板难以完成这种代码生成。

    CegCodeDG是我写的两个代码自动生成软件,分别就是上述两种方法的实现,长期以来,我用CEG完成我几个O/R Mapping框架的代码生成,并且在SinoLib之前,它都能很好地完成任务。但是SinoLib因为数据平台无关性的需要,所以使用了Xml文件来描述实体类所对应的表对象(可能是table、view或是一个select)信息,但由于其格式的特殊性,Ceg无法通过模板生成,我只能在生成后的Xml文件中再手工进行修改。另外还有一个特性Ceg无法满足,就是生成Java类文件时,类外的第一个字母需要大写,而表名却全是小写,这个时候如果要模板方法支持的话,只能再添加一个TAG,如<Ucase>,所以模板方法的扩充是极为不便的,并且功能有限,同时就软件实现来说,脚本方法实际要比前者更加容易得多。

    因为前些时间在项目中使用了ScriptControl进行脚本支持,所以决定开发CodeDG来弥补Ceg的不足,并且完全替代Ceg,实际上关于脚本支持的想法我在很早以前就有了,只是一直没有将它实现。经过周末一天多时间的开发,CodeDG完成了,它的特性包括:
    1、完成兼容VBA语法
    2、类似于ASP的内嵌式脚本语法,并且支持<%= .. %>
    3、支持函数和过程定义,添加IIF函数,App对象
    4、通过软件传递进来的Schema、Table对象访问当前数据库的结构信息

    其实CodeDG本来并不完成代码自动生成的功能,它主要是一种数据库结构信息获取和脚本解析和执行的平台,通过统一的接口向您的脚本暴露数据库结构信息(目前只支持MSSQL、Access的Table),您可以利用VBA创建文件生成需要的代码,也可以调用Excel或Word的Application来生成数据字典,它的整个表现模式和ASP非常相似,用动态的脚本,去创建静态的页面,当然,您还可以通过MsgBox来执行一些更加复杂的操作。
    
    加入脚本支持在您的程序中其实非常容易,您可以定义一些您特有的语法特性,如CodeDG的<%..%>脚本包含,然后将程序中的对象通过AddObject方法添加到ScriptControl对象,这样脚本就能够访问这些和您程序有关的资源了,接着就是执行脚本了,而要获得执行结果,有两个方法:一是通过模块内的public级变量,二是通过FUNCTION直接得到返回值。   

    这个Post虽然不是.Net的,但是.Net下的CodeDom同样可以实现类似功能,并且会更加强大。