类似多对多关系,其实一对多关系也是两个域对象之间的关系。一个域对象的Id记录在其他域对象中代表此域对象的所有信息。
但是与多对多关系必须依赖双域动词不同,一对多关系可以使用两个单域动词来完成需要的功能。
可以做如下分析。
在我实现的动词算子式代码生成器中所有域对象都存在三个特殊字段:domainid,domainname,activefield即域对象的主键,域对象标准名字和域对象活跃字段(可以看作反置的软删除标志,如果此字段被命名为deleted或delete时,系统会自动使用软删除标志的语义)。一对多关系要解决的是如下两个问题:输入或查询字段时候变成下拉列表,在Grid字段里使用domainname代替数据库里实际保存的domainid值。
解决这个问题有两种思路,使用联合查询或者使用两次查询。实际上在现有的动词算子式代码生成器的实现采用的是两次查询,把完整的动作拆成两部,采用单域动词实现。第一步是把主域对象查询出来,可以使用ListAll,ListActive,ListAllByPage或者是最新的主查询SearchByFieldsByPage。然后使用从域对象的ListActive单域动词将活跃的domainid翻译成domainname。下拉列表中的所有从域对象清单都是ListActive单域动词列出来的。
希望上述文字解答了对代码生成器感兴趣的同学们的疑惑。如果您对动词算子式代码生成器感兴趣,请参考以下链接:
https://gitee.com/jerryshensjf/InfinityJEEEU
https://gitee.com/jerryshensjf/InfinitySimpleJEE
https://gitee.com/jerryshensjf/PeaceWingSMEU
https://gitee.com/jerryshensjf/InfinityGPGenerator
https://gitee.com/jerryshensjf/PeaceWingSHCEU