基于Java枚举应用基于规则的分组

基于Java枚举应用基于规则的分组,java,enums,overriding,grouping,xstream,Java,Enums,Overriding,Grouping,Xstream,(此问题不需要了解XStream本身) 下面是使用XStream- <Root> <Entity> <Action>...</Action> <Type>...</Type> <Data>...</Data> </Entity> </Root> ... ... ... 由于数据节点是多态的,因此它可以映射到任意一个bean,即Data

(此问题不需要了解XStream本身)

下面是使用XStream-

<Root>
  <Entity>
     <Action>...</Action>
     <Type>...</Type>
     <Data>...</Data>
  </Entity>
</Root>

...
...
...
由于数据节点是多态的,因此它可以映射到任意一个bean,即DataABC、DataPQR、DataXYZ等:

<Data>
   <A>aaa</A>
   <B>bbb</B>
   <C>ccc</C>
 </Data>
or
 <Data>
   <P>ppp</P>
   <Q>qqq</Q>
   <R>rrr</R>
 </Data>
or
 <Data>
   <X>xxx</X>
   <Y>yyy</Y>
   <Z>zzz</Z>
 </Data>

aaa
bbb
ccc
或

购买力平价 qqq 存款准备金率 或 xxx yyy zzz

xstream有助于umarshaling bean,如:

Root=xstream.fromXML(rootXML)

有一个配置器接口,它通过将节的xml标记映射到实际的pojo bean来帮助配置XStream对象:

interface Configurer<T> {
    public void configure(T t);
}

enum ConfigurersLib implements Configurer<XStream> {
    ROOT("Root", Root.class),
    ENTITY("Entity", Entity.class),
    TYPE("Type", Type.class),
    ACTION("Action", Action.class),
    // polymorphic data tag configurers
    DATA_ABC("Data", DataABC.class),
    DATA_PQR("Data", DataPQR.class),
    DATA_XYZ("Data", DataXYZ.class),
    ;

   @Override
   public void configure(XStream xs){
     xs.alias(this.xmlTag, this.classType);
   }
   //constructor
   private ConfigurersLib(String tag, Class classType){
    this.xmlTag = tag;
    this.classType = classType;
   }
   ...
}
接口配置器{
公共空间配置(T);
}
枚举配置器库实现配置器{
ROOT(“ROOT”,ROOT.class),
实体(“实体”,实体类),
类型(“类型”,类型.class),
动作(“动作”,动作类),
//多态数据标记配置器
数据_ABC(“数据”,DataABC.class),
数据认证(“数据”,数据认证等级),
数据_XYZ(“数据”,DataXYZ.class),
;
@凌驾
公共无效配置(XStream xs){
别名(this.xmlTag,this.classType);
}
//建造师
私有配置库(字符串标记,类类型){
this.xmlTag=tag;
this.classType=classType;
}
...
}
对于给定的请求类型-我可以将一些配置程序分组,形成责任链,其中一个链是枚举集:

如果Type=ABC,则调用链--{ROOT,ENTITY,ACTION,Type,DATA_ABC}

如果Type=PQR,则调用链--{ROOT,ENTITY,ACTION,Type,DATA_PQR}

如果Type=XYZ,则调用链--{ROOT,ENTITY,ACTION,Type,DATA_XYZ}

上图比较简单,但不幸的是,这些配置器数量较多(50-100+),因此在创建此类组时可能会丢失一些配置器枚举元素。这也可能降低一些清晰度

问题 确保以下各项的最佳方式(模式/技巧/标准)是什么

  • 如何定义完整性(如果给定的传入请求包含所有标记,则配置程序集已完成)

  • 如何使分组易于覆盖(对于某些特殊情况,我们可能希望使用PQR而不是ABC。或默认为XYZ等)