代码生成器技术乱弹一,多对多关系与双域动词

        在动词算子式代码生成器(无垠式代码生成器,和平之翼代码生成器)中的中心概念是如下三种,动词算子,域对象和棱柱。本文主要分析如下技术场景,使用上述概念分析和实现代码生成器中的多对多关系。

        我们知道,大多数代码生成器生成的功能大家都称之为单表操作,在动词算子式代码生成器中有一个对应的概念称为单域动词。在和平之翼代码生成器1.5实现多对多关系以前,所有的动词算子式代码生成器只支持单域动词,也就是说和现在大多数代码生成器是一样的。多对多关系为何不同?

        原因是多对多关系不是单表操作,而是一种双表操作。使用动词算子式代码生成器的术语,这是一种双域动词。描述了主域对象和从域对象之间的关系。具体说来为了实现两个对象之间的多对多关系,在和平之翼代码生成器1.5和以后的其它实现中,都实现了如下四个双域动词:ListMyActive,ListMyAvailableActive,Assign和Revoke,和单域动词不同,单域动词只属于其域对象的棱柱,而双域动词关系到两个棱柱。比如对域对象User而言,ListAll单域动词明显属于UserPrism棱柱。而User和Role之间的多对多关系应该属于User Prism还是RolePrism? 答案很简单,看谁是主域对象,谁是从域对象。如果User是主域对象,动词分别结合为ListMyRolesByUserId,ListMyAvailableRolesByUserId, AssginRolesToUser,RevokeRolesFromUser,这时很明显这些功能都从属于UserPrism。

        从理论上说,多对多关系意味者两个数据对象之间存在着一张联系表,其联合主键是两个对象的主键。在动词算子式代码生成器中,主键即所有域对象都有的domainid字段。所以很容易构造出两个域对象之间的多对多关系。

        对多对多的典型三栏式多对多单页式弹性界面如图所示,使用了一个单域动词和4个双域动词。

        如图:

        左侧的User列表框是User域对象的ListActive单域动词驱动的。中间的列表框,是ListMy双域动词。右侧的列表框是ListMyAvailable双域动词驱动的。中间和右侧列表框之间的两个按钮,是Assign和Revoke双域动词驱动的。一目了然,非常清晰,希望您可以理解。

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

        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/1821472
今日推荐