ATG CommercePipelineManager的设计问题

用户名

中的runProcess()方法的定义PipelineManager

public PipelineResult runProcess(String pChainId, Object pParam)
            throws RunProcessException

这给我的印象是ANY对象可以作为第二个参数传递。但是,ATG OOTB具有PipelineManager引用CommercePipelineManager类的组件,组件覆盖了该runProcess()方法,并将pParam向下转换map并添加siteId到该方法。

基本上,这会强制客户端代码仅发送Map。因此,如果需要创建新的管道链,则必须使用map作为数据结构来传递数据。当然,总是可以通过创建一个新PipelineManager组件来解决这个问题,但是我只是想知道显式使用map in背后的想法CommercePipelineManager

用户1968494

我现在正在使用ATG 9.X,我相信PipelineManager它本身不会将参数转换为任何东西,而是将其传递给基础链-因此,如果您实现自己的处理器链,则可以自由传递任何参数,但是在大多数情况下在OOTB处理器中,约定传递可能包含其他必需参数的映射。

对于非常典型代码开箱即用的商业处理器(通常为自己的定制和商业管道的一些推广-遵循开箱即用的约定)是参数传递的地图将包含一切在处理器内部需要(在大多数情况下,它的Order对象,有时Profile和其他条件)。处理器本身通常没有任何依赖关系(通过注入提供)。处理器要做的第一件事就是将第一个参数投射到地图上,并提取其功能所需的所有内容(检查其内部是否包含所有必需的东西)。

从理论上讲,它可以提供更好的模块化和逻辑解耦,只要您具有基于接口的良好抽象即可(因此您可以将映射值转换为接口类型,而不是实现)。

例如,这是典型处理器的代码片段

  public int runProcess(Object pParam, PipelineResult pResult) throws Exception
  {
    HashMap map = (HashMap) pParam;
    OrderManager mgr = (OrderManager) map.get(PipelineConstants.ORDERMANAGER);
    Order order = (Order) map.get(PipelineConstants.ORDER);

    if (order == null)
      throw new InvalidParameterException("...");
    if (mgr == null)
      throw new InvalidParameterException("...");

    // ... business logic 

    return SUCCESS;
  }

附言:我同意可以将其设计得更好。但是,ATG中还有一些其他的“中世纪”事物如今很奇怪且难以解释-但记住平台开发始于1991年,这也许还可以

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ATG-通过atg方案发送电子邮件时出现的问题

来自分类Dev

ATG <dsp:setvalue>使用JSTL设置值时遇到问题

来自分类Dev

无法安装ATG 10.1

来自分类Dev

ATG AngularJs,春季

来自分类Dev

ATG退款付款方式

来自分类Dev

ATG AngularJs,春季

来自分类Dev

ATG servlet 和 Droplet

来自分类Dev

如何开始ATG网络商务

来自分类Dev

ATG Nucleus-EJB关系

来自分类Dev

参考集成ATG Siebel出错

来自分类Dev

是否可以进行ATG类的热交换

来自分类Dev

什么是ATG管道及其运作方式?

来自分类Dev

如何在ATG中创建存储库?

来自分类Dev

蚀中的ATG-JBoss项目

来自分类Dev

是否可以进行ATG类的热交换

来自分类Dev

ATG实例的正确启动顺序是什么?

来自分类Dev

什么是ATG管道,它如何工作?

来自分类Dev

ATG - 覆盖方法并返回更具体的组件

来自分类Dev

无法在Oracle Commerce(ATG)中搜索订单/客户-CSC 11.1

来自分类Dev

ATG RQL查询,例如SQL'(x,y,z)中的属性'

来自分类Dev

打开ACC ATG时如何修复格式错误的帮助URL?

来自分类Dev

在ATG中$ scope = global是什么意思?

来自分类Dev

打开ACC ATG时如何修复格式错误的帮助URL?

来自分类Dev

无法解析组件/ atg / dynamo / servlet / adminpipeline / Authenticator

来自分类Dev

如何修补在weblogic / atg上运行的应用程序?

来自分类Dev

使用runAssembler时,为什么我的ATG构建失败?

来自分类Dev

如何确定正在运行哪个版本的Oracle Commerce(ATG)?

来自分类Dev

将输入值传递给 ATG 中的 java 文件

来自分类Dev

设计菜单有问题