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

代码生成器技术乱弹四十三,动词算子式代码生成器的秘密,为代码生成而设计

阅读更多
代码生成器技术乱弹四十三,动词算子式代码生成器的秘密,为代码生成而设计

相信对动词算子式代码生成器有印象的人们无不对这类代码生成器的弹性和适应性印象深刻。并好奇是如何做到这一点的。这就是动词算子式代码生成器的的基本原则,为代码生成而设计。这一特性不是偶然的,而是这种代码生成器刻意为之。
对任何软件,管理变与不变总是基本的考虑。对代码生成器而言,这更为重要。因为代码的不变,代码生成器才能有相对固定的设计与实现。因为变,所以代码生成器才能拥有弹性,适应不同的需求与场景。所以,对变与不变不变的管理,是代码生成器设计的核心内容。
对这种需求,关键是为代码生成而设计,什么意思,就是你需要对代码生成器的运行有整体考虑。考虑代码生成器如何变,那里保持不变。具体说来,就是变的集中和不变的集中,所以的变化,被集中于域对象,而不变的,是形形色色的动词算子。
为什么这么设计,首先,这是自然的关系,比如说ListAll动词,即从数据库中返回您需要的数据,您会发现,对不同的ListAll动作,比如ListAllStudents和ListAllTeachers,不同的只是查询的数据库表不同和表征的pojo对象不同。而不同的ListAll动作完成的步骤是完全相同的。而同为Student对象,ListAll动作和Delete动作的步骤的逻辑结构是完全不同的。所以,动词算子式代码生成器只是诚实的归纳和利用了这种逻辑关系。
第二点,动词算子和域对象的笛卡尔积生成具体的方法阵列的方法本质上是一种降维操作。他把一个二维的方法阵列降维为一维的域对象数组和一维的动词算子数组的笛卡尔积。虽然简单,但我确实没有发现更为有效的方式。
第三点,把代码生成器原子化是降低代码生成器耦合的增强它的扩展性的好办法。传统的代码生成器是以文件为单位的。这不是代码的逻辑结构。但却是代码的组织单元。所以,如果要增减功能,以文件单位为中心的代码生成器经常会牵一发动全身。而以动词算子为单位的代码生成器是原子化的,这方面的缺点就不存在了。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics