代码生成器技术乱弹五,动词算子浅析

        无垠式和和平之翼代码生成器统称为动词算子式代码生成器。您是否知道为什么这类型的代码生成器称为动词算子式代码生成器?这里的主要问题是什么是动词算子。我们知道,程序大师们给了一个公式:

程序=数据结构+算法

而我可以给一个公式,在动词算子式代码生成器中:

程序=域对象+动词算子

也就是说,动词算子在某种程度上是算法的等价物。

那么,到底什么是动词算子,我的定义是动词算子是一组命名的函数级代码生成器堆栈。也就是说动词算子一旦和相应的域对象结合(如果是单域动词就是一个动词算子和一个域对象结合,如果是双域动词,是一个动词算子和两个域对象结合)。生成的结果是一个完整的方法堆栈包括了指定动词的Dao,DaoImpl,Service,ServiceImpl,Facade和JSButton和JSJsonAction的一系列方法。包括5个java方法和两个JavaScript方法。

        为何如此?答案是标准化,固定化以简化测试,降低通透测试需要的测试量。本质上,函数调用是一张网,一个函数可以调另一个函数。这是叫测试人员抓狂的测试工作量之网。不能这样干否则您的测试人员或者用户会把您吃了。所以我的解决方法是把某个函数固定搭配起来,比如ListAll的Facade方法只能调用LIstAll的ServiceImpl的方法,而ListAll的ServiceImpl也只能调用List All的DaoImpl方法,不知您编写过让人抓狂的方法调用Controller的DoGet方法调用ServiceImpl的listAllStudents方法,ServiceImpl的listAllStudents方法里调用queryAllPuple方法,而页面上的js方法叫另外一个古怪的方法。这是程序员的地狱。在动词算子式代码生成器中,命名是很有规律的。

        世界清静了?没这么简单,曾经,在无垠式代码生成器0.8以前。ListAll里面的方法永远是一致的,一个已经失落的程序员的天堂,为什么?因为有时和技术的绑定的关系。

        在和平之翼代码生成器中,动词算子SearchByFieldsByPage就是一个例子,比如它和student的结合在Facade层称为SearchStudentsByFieldsByPage,但是问题是分页查询,mysql里是limit ? offset ?,参数不对ByPage里是pagenum和pagesize不是这两个参数。所以需要把pagenum和pagesize换成limit和offset。我的解决方案是其dao和daoimpl的方法名是SearchStudentsByFieldsByLimit。一个动词算子的各层的名字不一致了。我也没办法,网状的调用模型在暗笑。

        希望上述文字解答了对代码生成器感兴趣的同学们的疑惑。如果您对动词算子式代码生成器感兴趣,请参考以下链接:

        https://gitee.com/jerryshensjf/InfinityJEEEU

        https://gitee.com/jerryshensjf/InfinitySimpleJEE

        https://gitee.com/jerryshensjf/PeaceWingSMEU

        https://gitee.com/jerryshensjf/InfinityGPGenerator

猜你喜欢

转载自my.oschina.net/jerryshensjf/blog/1822155