基于RepositoryItem的ATG JavaBean
我不明白如何在ATG中使用repositoryItem。我需要如何在其上构造自定义逻辑 我需要在repositoryItem上创建普通的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
RepositoryItem store = getRepository().getItem(..);
String address = store.getPropertyValue(..);
class StoreBean {
String address;
StoreBean(RepositoryItem store) {
address = store.getPropertyValue(..);
}
}
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的便利性。最小化类转换过程中的错误,传输多个对象作为方法的参数,在没有开销的情况下获取属性。