1. 元编程(Metaprogramming) 1
2. 元编程的历史and发展 1
3. 元类型and元数据 1
4. 元编程实现方式 2
4.1. 代码生成 2
4.2. lex和yacc分析器 2
4.3. 泛型编程 2
4.4. 注解 2
4.5. 解释型框架 2
4.6. 对象工厂概念,一个会写程序的程序! 3
4.7. Aop 3
4.8. 数据对象触发器和 可配置的插入式服务 3
5. 应用场景 4
6. 参考 4
1. 元编程(Meta programming)
元编程(Metaprogramming)是指某类计算机程序的编写,这类计算机程序编写或者操纵其他程序(或者自身)作为它们的数据,或者在运行时完成部分本应在编译时完成的工作。很多情况下比手工编写全部代码相比工作效率更高。编写元程序的语言称之为元语言,被操作的语言称之为目标语言。一门语言同时也是自身的元语言的能力称之为反射。
就是将业务逻辑与实现代码进行分离,仅用XML这类的描述性语言描述业务之间的映射关系,不需要写实现代码即完成编程。
作者:: 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
2. 元编程的历史and发展
在1994年初露端倪,由一个叫 Erwin Unruh 的人首先发现。在1994年,C++标准委员会在圣迭戈(SanDiego)举行的一次会议期间, Erwin Unruh展示了一段特别的代码。这段代码的特别之处在于程序的功能在编译期实现而非运行期,编译器以错误信息的方式产生从2到某个给定值之间的所有质数。同年夏天, Todd Veldhuizen 受Erwin 的例子启发,发现可以使用C++模板进行元编程,并发表了一份技术报告
3. 元类型and元数据
类型的类型(泛型???) ,数据的数据为元数据 (anno/attr)
4. 元编程实现方式
4.1. 代码生成
“元编程”实际上是“代码生成”的一种别称
可以给它一小段代码,让它返回一段可执行的程序,或是一个可以识别或重写的解析树
最常用的元编程工具是编译器,把高级语言转换为汇编语言或机器语言。更灵活的方法是在程序中嵌入解释器直接处理程序数据。有一些实现例如为Object Pascal编写的RemObject's Pascal Script。
4.2. lex和yacc分析器
另一个很常用的元编程例子是lex和yacc,用来生成词法分析器和语法分析器。Yacc通常用作编译器的编译器,生成一个把高级语言转换为机器语言的工具。
所以,所谓模板元编程,你可以理解为:它把编译器当成了更高层次的解释器和运行时而已. 模板编程是产生式编程(比如泛型编程)
4.3. 泛型编程
4.4. 注解
注解在其中扮演了核心角色。其思想是通过注解够告诉工具如何生成新代码、转换代码或者决定运行期的行为。以Java Persistence API(JPA)为例,这也是Java 1.5引入的功能。它允许开发者以声明的方式如@Entity,指定Java对象与数据库实体之间的关系。然后Hibernate这类工具就可以使用这些 注解,在运行期生成映射文件和SQL查询。
4.5. 解释型框架
Openbiz框架特别之处在于这是一个解释型框架,相当于"编译器"的角色。 当其它开发环境和框架致力于让开发人员少写代码的时候,Rocky兄提出,别让他们写代码了直接用简单XML语言来描述映射关系即完成编程。
4.6. 对象工厂概念,一个会写程序的程序!
每次提到这个概念都让我激动不已,仿佛我们距离智能化编程只有咫尺之遥。这个理念据我所知最先提出的是.Net的自省(这个汉语翻译很诡异)这一概念,即由主程序动态创建出另一个独立的子程序,动态编译,然后按需装载及销毁(跟变形金刚似的),当时看的我也十分激动,此后这个概念基本上就再也没人提了。
直到后来我阅读分析过了Openbiz的底层源代码惊人地发现了基于PHP实现的对象工厂这一理念。剖析一下思路,以数据对象为例:
基于XML的元数据文件被视为发给"工厂"的装配单,上面描述了应具体如何"组装"这个对象,以及这个对象与地层数据库的映射关系,与同层级的其它对象的映射关系(例如一对多的 ORM)
对象工厂接到创建这样对象的生产指令后,按描述创建并组装所需对象,并以串行化的方式将对象体和状态缓存在系统内,为再次触发调用,而优化性能。直到元数据配置文件改变之前,对象只需要动态生产一次,即无限次使用。
4.7. Aop
4.8. 数据对象触发器和 可配置的插入式服务
这个邮件和短信的触发肯定不应该在UI层实现,因为我们要考虑不管订单从何处被生成,都应触发发送邮件这个逻辑。所以这个业务逻辑应该被耦合在数据对象上,即只要有订单被生成就应当触发该逻辑。
而发邮件和发短信些种常见的可重用性逻辑,可以被定义为pluginService, 例如在发邮件的Service中,收件人,标题,内容应当是API的参数,而发邮件的帐户,SMTP服务器信息相对于业务整个系统来说通常变化不大,应作 为元数据接口,而如何与服务器链接来发送邮件则是具体被重用的对象逻辑了。这种设计的精妙之处我们将在下一篇文章中具体给大家分析
5. 应用场景
基于这种编程逻辑,我们解决一个常见的修改和扩展问题。
例如:客户经常会再项目验收时提出底地层数据字段的修改,"您看联系人管理这个模块,能不能再增加个 生日 和 喜好 字段,要不然这尾款恐怕..."。
怎么办?
改吧。增删读写(CRUD),列取(List),搜索(Search)一个不能少全都要改。
谁改?
肯定你改啊,因为是你写程序。
Openbiz元数据就不一样了,现在我只修改一个数据描述文件,然后是对象工厂会检测到元数据配置文件发生改变,然后他来自动重新编写对象和所有与其相关的映射调用(ORM)。
当你面对的是一个业务偶合性特别复杂的系统时,你会发现这些上层对象"你中有我,我中有你"堆叠式调用复杂至极(恶心至极)。比如在文档修改记录的视图中也调用了联系人的这几个字段等,你确定能一个不差的修改遍与这个数据结构的每一个角落么?
此非人力所能为也!但对象工厂可以,因为是按需生产创建。
6. 参考
元编程_百度百科.htm
元编程_互动百科.htm
Java 8的类型注解:工具和机会 _Linux伊甸园开源社区-24小时滚动更新开源资讯,全年无休!.htm
源于java编程思想的Openbiz框架实现PHP的元数据编程_PHP_it动力.htm
相关推荐
数据库编程总结 数据库编程总结 数据库编程总结
总结来说,C++元编程和Boost编程库中的MPL是C++编程中非常强大的工具,它们利用了C++模板的特性,在编译阶段进行计算和代码生成,使得程序员能够在程序设计阶段就进行高度优化和抽象。这些技术的应用极大地丰富了C++...
【VC++数据库编程总结】 在IT领域,尤其是软件开发中,数据库编程是不可或缺的一部分,尤其在使用VC++作为开发工具时。VC++可以与多种数据库系统进行交互,如SQL Server、Oracle等,通过不同的访问技术实现数据的...
VC界面编程总结
【C++网络编程总结报告】 本报告主要针对C++网络编程进行总结,旨在为学习者提供参考和方便。网络编程是计算机科学中的一个重要领域,它涉及到通过网络进行数据传输和通信的应用程序开发。C++是一种强大的编程语言...
总结来说,C++模板元编程是一种强大的技术,它允许我们在编译时处理类型和代码,提高了程序的效率和安全性。Loki库是这一领域的杰出代表,它提供了丰富的模板元编程工具和设计模式,帮助开发者更好地利用C++的这一...
"VC编程经验总结"是一个珍贵的资源,它涵盖了开发者在实际工作中可能遇到的各种问题及其解决方案。这个压缩包包含了一份HTML文档"阅读器下载.htm",可能是一个在线阅读器或者相关工具的下载链接,用于更好地查看和...
通过上述知识点的总结,我们可以看出模板元编程是一种强大且灵活的技术,它不仅可以帮助开发者编写更高效的代码,还能在一定程度上降低代码的复杂度。掌握这项技术,对于中高级C++程序员来说是非常有益的。
本篇文章将结合提供的文件名称,深入探讨TCP/UDP编程的核心知识点,帮助初学者理解这两种协议的原理及其在实际编程中的应用。 首先,TCP UDP笔记.doc可能包含以下内容: 1. **TCP与UDP的基本特性**:TCP是一种面向...
VC高级编程总结 详细介绍VC++6.0和Windows编程的核心技术
程序员编程好习惯总结 程序员在编程过程中需要遵循一些良好的习惯,以提高代码质量、提高工作效率和降低错误率。本文总结了15条程序员编程的好习惯,涵盖了编程设计、代码编写、版本控制、代码优化、代码维护等方面...
### .NET元编程知识点概述 #### 一、元编程概念 元编程(Metaprogramming)是一种编程技术,它允许程序在运行时分析或修改自身结构和行为的能力。在.NET框架中,元编程主要通过反射(Reflection)、动态类型创建、代码...
Java Socket 编程总结 Java Socket 编程是Java语言中用于网络编程的主要技术之一。它允许开发者创建网络应用程序,通过Socket实现客户机/服务器结构的通信。在Java中,Socket编程主要是基于TCP/IP协议的网络编程。 ...
Java并发编程技术总结,所含内容有并发特性、并发锁、线程池、并发场景解决方案等,对于性能思考和内容参考资料有一定说明
"Access数据库和VBA编程总结" 本文档为Access数据库和VBA编程的总结,涵盖了关系运算符、逻辑运算符、条件语句、循环语句、比较大小、金字塔和加密等多个方面的知识点。 关系运算符是Access数据库中一种基本的...
一共包括了java内存模型、并发基础、锁、并发工具类、java并发编程实战、优化、阻塞队列、原子操作、并发集合、线程池、线程基础、自定义并发类等13个方面的内容。 学习并发编程一张图就搞定了。
绝佳的VC界面编程宝典,包含96例,还有详细讲解!例如:自绘菜单的实现,在VC中透明浮动按键的实现,用VC设计托盘图标程序,图像平滑滚动效果的VC实现,利用钩子实现菜单阴影效果,在VC下显示JPEG、GIF格式图像的一...
首先,标题中的"Unix 脚本编程总结与应用实例"表明我们将关注于编写和应用Unix shell脚本。Unix脚本是基于Bourne shell或其变种(如bash、ksh、csh)的文本文件,其中包含可执行的命令和控制结构。这些脚本可以用于...