@gengzhengtao
2015-07-23T09:41:24.000000Z
字数 3312
阅读 1398
电商平台broadleafCommerce Broadleaf概念 数据与服务模型
Broadleaf提供了两种数据结构存储类似于枚举的数据,BroadleafEnumerationType 和 DataDrivenEnumeration.这两个在本质上就是一个字符串值的集合。BroadleafEnumerationType用来提供业务逻辑预定义使用的值,而DataDrivenEnumeration用来提供在像管理控制台下列菜单这种地方提供的一组变量值。
该BroadleafEnumerationType是实现创建预定义的硬编码字符串值的自定义枚举的接口。Broadleaf 框架中的FulfillmentType就是一个例子。FulfillmentType是包含对应FulfillmentGroup类型可用的值。下面是FulfillmentType对于BroadleafEnumerationType是如何实现的:
public class FulfillmentType implements Serializable, BroadleafEnumerationType {private static final long serialVersionUID = 1L;private static final Map<String, FulfillmentType> TYPES = new LinkedHashMap<String, FulfillmentType>();public static final FulfillmentType DIGITAL = new FulfillmentType("DIGITAL", "Digital");public static final FulfillmentType PHYSICAL_SHIP = new FulfillmentType("PHYSICAL_SHIP", "Physical Ship");public static final FulfillmentType PHYSICAL_PICKUP = new FulfillmentType("PHYSICAL_PICKUP", "Physical Pickup");public static final FulfillmentType PHYSICAL_PICKUP_OR_SHIP = new FulfillmentType("PHYSICAL_PICKUP_OR_SHIP", "Physical Pickup or Ship");public static final FulfillmentType GIFT_CARD = new FulfillmentType("GIFT_CARD", "Gift Card");@Deprecatedpublic static final FulfillmentType SHIPPING = new FulfillmentType("SHIPPING", "Shipping");public static FulfillmentType getInstance(final String type) {return TYPES.get(type);}private String type;private String friendlyType;
下面是怎么在业务逻辑使用FulfillmentType
if(!FulfillmentType.GIFT_CARD.equals(fulfillmentGroup.getType())) {shippableFulfillmentGroups++;}
DataDrivenEnumeration 是一个包含 DataDrivenenumerationValues值列表的实体。DataDrivenEnumerationValue也是一个实体,他提供了一个单一字符串值的结构。与之相反的 BroadleafEnumerationType是使用硬编码的一组值。DataDrivenEnumeration包含了一个可以根据需要进行改变的数据库存储的值。
下面是一个例子:如何使用DataDrivenEnumration创建一个管理控制台的下拉列表,为了使用DataDrivenEnumration给一个管理下拉列表提供的值,@AdminPresentation注解要与@AdminPresentationDataDrivenEnumeration注解一块使用,下面是一个例子:
注意:
@AdminPresentation用来指定样式和所属域,AdminPresentationDataDrivenEnumeration用于指定将DataDrivenEnumerationValue特定子集值分配给该字段。
@Column(name = "TAX_CODE")@AdminPresentation(friendlyName = "SkuImpl_Sku_TaxCode")@AdminPresentationDataDrivenEnumeration(optionFilterParams = { @OptionFilterParam(param = "type.key", value = "TAX_CODE", paramType = OptionFilterParamType.STRING) })protected String taxCode;
optionFilterParams -改进查询的附加参数 用于指定在下拉菜单中哪些值是可见的param = "type.key" -字段名称在目标实体中用来优化查询。在这种情况 type来自DataDrivenEnumerationValue,key 来自DataDrivenEnumeration。value = "TAX_CODE" -该字段的值应于任何项目查询的返回值相匹配。paramType= OptionFilterParamType.STRING -用来标注OptionFilterParam注解中存储的值的类型。@AdminPresentationDataDrivenEnumeration注解指定了字段TaxCode将要被分配一个来自DataDrivenEnumerationValue拥有type.key="TAX_CODE"值集合的一个值。管理控制台将显示包含这组值得下拉菜单。
这里是备用的例子,举例说明创建一个下拉列表他的值来自 CategoryImpl.name:
@Column(name = "NAME")@AdminPresentation(friendlyName = "CategoryImpl_Category_Name")@AdminPresentationDataDrivenEnumeration(optionListEntity = CategoryImpl.class, optionValueFieldName = "name",optionDisplayFieldName = "name", optionCanEditValues = true)protected String name;
optionListEntity 指定应将呈现给用户在下拉列表中的选项列表中的查询的目标实体。在这里我们使用CategoryImple.classoptionValueFieldName = "name" 指定目标实体中的字段。这个字段的值将被存储在这个注解字段中。在这里我们使用CategoryImpl.name.optionDisplayFieldName = "name" -指定目标实体中的字段,这个字段包含了需要显示的值,这个值将会在下拉字段中展示给用户。在这里我们使用CategoryImpl.name.optionCanEditValues = true - 在下拉列表中用户能否编辑(或输入新的值)。@AdminPresentationDataDrivenEnumeration注释指定字段名称将被从所有CategoryImpl.name值的集合中分配一个值(无optionFilterParams被用来细化查询)。