Hybris里极其重要的概念。

之前的issue谈到了Hybris MVC里的M指的是DTO,JSP作为V显示DTO的value,而DB层的Model和DTO的结构不一致。

那么,数据从DB读取之后,需要经过一个转换,写入到DTO。执行这个转换的role,就是Convertor+Populator。

注:DTO是软件设计里一个common的概念,不是Hybris特有。定义见wiki

Hybris官方定义

(1) Facade: A facade is a software design pattern that abstracts from an underlying implementation and offers an alternate, often reduced and less complex interface.

(2) DTO:Data Transfer Objects (DTOs) are objects created to only contain values and have no business logic except for getter and setter methods. Using DTOs, you can "combine" Hybris items - for example, this document adds price- and media-related data to a product object.

先看CRM。

line 17的方法从CDS view里读取persistent data:

这样做类比。

可以看到CRM两个layer之间的转换非常light weight,仅仅是几个赋值操作。

Hybris里把这个赋值操作封装到了两个新的object里:Converter和Populator。

为什么要搞这么麻烦:

(1) Data objects are constructed from Models or other Service Layer objects using Converters and Populators. The Data object is always created from a prototype-scoped spring bean that is defined in the beans.xml file for the extension.

(2) Converters create new instances of Data objects and call Populators to populate these.

即Converter负责创建Data object的实例(就是Java class的实例), Populator负责call这个实例的setter方法把业务数据写入data obeject,这样JSP绑定到这些data object的某个属性的field就能显示出来值。

既然Hybris基于Spring,那么也要follow Spring的一些原则:

(1) No concrete Converters should be written, all converters should be Spring configured only and should use the AbstractConverter base class.

(2) No Populator should be called directly in code, Converters should be Spring injected and used.

(3) All conversion logic should exist in Populators and these should be well-encapsulated and independent.

Populators

Populators break the conversion process of filling out a Data Object down into a pipeline of population tasks or steps. Each Populator carries out one or more related updates to the Data Object prototype. Each population step can invoke services or copy data from the source business object to the prototype Facade Data object. Facades always use a Converter to create a new instance of a Data Object prototype and then invoke Populators or other Converters to fulfill the task of building up the Data Object.

看具体的例子:

这个文件位置:

"C:Hybris6.5.0.0.23546hybrisbinext-acceleratoracceleratorservicessrcdehybrisplatformacceleratorservicespaymentcybersourceconverterspopulatorsPaymentDataPopulator.java"

为什么要单独抽象这两个object出来?和CRM Genil layer的实现一对比就清楚了。

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

java转sap hybris方向_SAP Hybris的Convertor, Populator, Facade和DTO这几个概念是如何协同工作的...相关推荐

  1. SAP Hybris的Convertor, Populator, Facade和DTO这几个概念是如何协同工作的

    Hybris里极其重要的概念. 之前的issue谈到了Hybris MVC里的M指的是DTO,JSP作为V显示DTO的value,而DB层的Model和DTO的结构不一致. 那么,数据从DB读取之后, ...

  2. 2021年3月9日 北京快手Java开发–用户增长方向 实习面经(一面)

    title: 2021年3月9日 北京快手Java开发–用户增长方向 实习面经(一面) tags: 面经 2021年3月9日 北京快手Java开发–用户增长方向 实习面经(一面) 自我介绍你能介绍一下 ...

  3. Java的主要就业方向

    一. Java概述 1. Java语言概述 2. Java虚拟机以及跨平台原理 3. Java的主要就业方向 4. Java的不同版本 5. Java开发环境搭建 6. 第一个Java程序示例 7.  ...

  4. Java都有哪些方向可以选择?分享这三个

    大家报班学Java一般都是为了找份Java相关的工作,但是在学习完之后很多人都会比较迷茫不知道自己可以找什么样的工作,有哪些岗位是自己可以选择的.所以今天小千就来给大家讲讲Java都有哪些方向可以选择 ...

  5. 学Java后未来发展方向和前景怎么样?

    学习Java成为Java程序员,进入IT行业,已经成为很多年轻人的选择.毕竟,Java开发薪资高.待遇好已经是公认的事实.那么,学Java后,未来的发展方向和前景怎么样呢?针对这些问题,小千就给大家分 ...

  6. Java有哪些从业方向?分享这9个

    现在Java非常热,是因为通过学习Java能够快速的找到工作.那么,Java有哪些从业方向?下面,跟随小千的脚步一起来看看吧. Java从业方向一:Web开发 Web前端开发工程师是一个很新的职业,是 ...

  7. Atitit.swift 的新特性 以及与java的对比 改进方向attilax 总结

    Atitit.swift 的新特性 以及与java的对比 改进方向attilax 总结 1. defer关键字1 2. try!形式存在的"不失败"机制3 3. Guard 4 4 ...

  8. JAVA与SAP数据交互的方式总结

    JAVA与SAP数据交互的方式总结 RFC方式:Java程序直接通过RFC访问SAP的对象(或称函数,可能叫法不对)     SAP提供了BAPI(Business Application Progr ...

  9. 学java的就业方向_学Java以后的就业方向

    原标题:学Java以后的就业方向 Java作为市场上广泛流行的编程语言,前景十分看好,这就吸引了许多有至于从事IT行业的青年人追逐.大家关注的重点无非是,学习java之后,自己的就业方向是怎么样的?今 ...

  10. 学java的就业方向_新手学习Java后有哪些就业方向?

    新手学习Java后有哪些就业方向?下面,小编给大家推荐几个. 软件测试工程师:这个职位跟系统工程师基本新手学习Java后有哪些就业方向?一个级别,需要你对编程有一定的基础,后期要跟系统工程师同时进项目 ...

最新文章

  1. redux常见问题答疑
  2. C++/java/python 创建二维数组
  3. linux系统下tar/gz/7z/xz/bz2/zip等各种格式的打包压缩解压
  4. 【学习笔记】平等博弈及常见的公平博弈类型
  5. 深入浅出WPF之Binding的使用(一)
  6. 利用Shell将MySQL数据表导出为csv文件
  7. mysql查询执行了1s_查询执行慢的SQL
  8. LINUX下载编译YASM
  9. oracle删临时表,ORACLE中创建和删除临时表
  10. 企业微信电脑版显示连不上服务器,钉钉环境部分Anroid手机,微信、企业微信pc版,登录失败的解决办法...
  11. 人工智能的发展,主要经历哪几个阶段?
  12. 基于 Prometheus 的边缘计算监控实践
  13. 直立车想节能——2020全国大学生智能车车竞赛经验记录之梦的开始
  14. 等效均一剂量(Equivalent Uniform Dose EUD)的概念
  15. 机器视觉照明技术Machine Vision Light Technique
  16. centos7-汉化vim帮助指令文档
  17. android 白噪音闹钟,Sleep Away 结合白噪音的睡眠周期计算机,告诉你最佳的上床时间! ! (Android)...
  18. Python匿名函数
  19. Ext2.0学习入门
  20. spring-cloud-day04之Alibaba

热门文章

  1. Hibernate存取JSON数据
  2. stm32移植paho_paho.mqtt.c开源代码的ARM移植
  3. dynamic集合动态添加属性
  4. HTML5 拖放(Drag 和 Drop)
  5. 柳氏管理学:自己不会,就要勤做笔记
  6. 脚本变量中包含空格的解决办法
  7. FreeSwitch命令:切换视频会议画面布局
  8. 同一个JDK,命令行运行,与JNI加载虚拟机,还是有差异
  9. 作为测试人员,不要说有错误,要说有什么错误
  10. Duplicate methods named spliterator with the parameters () and () are inherited from the types Colle