基于RepositoryItem的ATG JavaBean

基于RepositoryItem的ATG JavaBean,java,oracle,e-commerce,javabeans,atg,Java,Oracle,E Commerce,Javabeans,Atg,我不明白如何在ATG中使用repositoryItem。我需要如何在其上构造自定义逻辑 我需要在repositoryItem上创建普通的JavaBean还是按原样使用它? 我会尝试解释: 关于repositoryItem的逻辑: RepositoryItem store = getRepository().getItem(..); String address = store.getPropertyValue(..); JavaBean上的逻辑: class StoreBean { St

我不明白如何在ATG中使用repositoryItem。我需要如何在其上构造自定义逻辑

我需要在repositoryItem上创建普通的JavaBean还是按原样使用它? 我会尝试解释:

  • 关于repositoryItem的逻辑:

    RepositoryItem store = getRepository().getItem(..);
    String address = store.getPropertyValue(..);
    
  • JavaBean上的逻辑:

    class StoreBean {
      String address;
    
      StoreBean(RepositoryItem store) {
        address = store.getPropertyValue(..);
     }
    }
    
  • 然后,我可以按照自己的意愿使用StoreBean来获取it字段(例如,它们的延迟加载)


    ATG的最佳实践是什么?

    这是一个偏好问题

    使用
    RepositoryItem
    对象无法得到的是强类型检查。您必须对正在使用的
    RepositoryItem
    的类型进行假设,或者必须在代码中进行手动检查(参见下面的示例)。此外,由于
    RepositoryItem
    属性存储为元数据,因此您必须知道1)XML存储库描述符中属性的实际名称,2)需要知道类型,这需要类型转换(例如:
    String firstName=(String)item.getProperty(“firstName”);
    )下面是一个验证示例,用于确保
    RepositoryItem
    对象的类型为“sku”:

    如果采用不使用“JavaBeans”的方法,则会增加应用程序中出现运行时错误的风险。我的建议是,在使用RepistoryItem对象和包装器对象之间保持健康的平衡。对于计划在大量代码库中使用的关键项,我建议使用包装器对象

    我建议,如果您创建包装器对象,那么为了保持一致性,您应该遵循Oracle Commerce使用的相同设计模式。例如,“订单”项由
    OrderImpl
    包装,并实现
    ChangedProperties
    接口

    public class OrderImpl
    extends CommerceIdentifierImpl
    implements Order, ChangedProperties
    

    这是一个偏好的问题

    使用
    RepositoryItem
    对象无法得到的是强类型检查。您必须对正在使用的
    RepositoryItem
    的类型进行假设,或者必须在代码中进行手动检查(参见下面的示例)。此外,由于
    RepositoryItem
    属性存储为元数据,因此您必须知道1)XML存储库描述符中属性的实际名称,2)需要知道类型,这需要类型转换(例如:
    String firstName=(String)item.getProperty(“firstName”);
    )下面是一个验证示例,用于确保
    RepositoryItem
    对象的类型为“sku”:

    如果采用不使用“JavaBeans”的方法,则会增加应用程序中出现运行时错误的风险。我的建议是,在使用RepistoryItem对象和包装器对象之间保持健康的平衡。对于计划在大量代码库中使用的关键项,我建议使用包装器对象

    我建议,如果您创建包装器对象,那么为了保持一致性,您应该遵循Oracle Commerce使用的相同设计模式。例如,“订单”项由
    OrderImpl
    包装,并实现
    ChangedProperties
    接口

    public class OrderImpl
    extends CommerceIdentifierImpl
    implements Order, ChangedProperties
    

    ATG开箱即用存储库实现在大多数情况下不使用JavaBeans。使用JavaBeans并延迟将其加载到内存中的一大缺点是会丢失许多存储库缓存特性,并会增加内存占用。例如,您将无法监视缓存统计信息或定期使缓存无效。当查询的结果集很大时,您还将有实例化的开销

    相反,您也可以使用DynamicBean,它允许您引用与instance Profile.city的java bean类似的存储库属性


    如果您只想包装它们,以便开发人员不会意外地错误地解析它们,那么您可以为各种类型的就绪写入操作为每个存储库编写一个util类,并集中您的类型安全性。

    ATG开箱即用存储库实现在大多数情况下不使用JavaBean。使用JavaBeans并延迟将其加载到内存中的一大缺点是会丢失许多存储库缓存特性,并会增加内存占用。例如,您将无法监视缓存统计信息或定期使缓存无效。当查询的结果集很大时,您还将有实例化的开销

    相反,您也可以使用DynamicBean,它允许您引用与instance Profile.city的java bean类似的存储库属性


    如果您只想包装它们,以便开发人员不会意外地错误地解析它们,那么您可以为各种类型的就绪写入操作为每个存储库编写一个util类,并集中您的类型安全性。

    您是对的。我的观点之一是开发人员使用RepositoryItem的便利性。最小化类转换过程中的错误,传输多个对象作为方法的参数,在没有开销的情况下获取属性。你是对的。我的观点之一是开发人员使用RepositoryItem的便利性。最小化类转换过程中的错误,传输多个对象作为方法的参数,在没有开销的情况下获取属性。