SAP Hybris的Convertor, Populator, Facade和DTO這幾個概念是如何協同工作的
Hybris裡極其重要的概念。
之前的issue談到了Hybris MVC裡的M指的是DTO,JSP作為V顯示DTO的value,而DB層的Model和DTO的結構不一致。
那麼,資料從DB讀取之後,需要經過一個轉換,寫入到DTO。執行這個轉換的role,就是Convertor+Populator。
注:DTO是軟體設計裡一個common的概念,不是Hybris特有。定義見[wiki]( https:// en.wikipedia.org/wiki/D ata_transfer_object )
# 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:\Hybris\6.5.0.0.23546\hybris\bin\ext-accelerator\acceleratorservices\src\de\hybris\platform\acceleratorservices\payment\cybersource\converters\populators\ PaymentDataPopulator.java"
為什麼要單獨抽象這兩個object出來?和CRM Genil layer的實現一對比就清楚了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2672028/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SAP CRM WebClient UI和Hybris的controller是如何被呼叫的WebclientUIController
- 這幾個概念你可能還是沒搞清require、import和exportUIImportExport
- SAP Hybris的Master Tenant和Netweaver的System ClientASTNaNclient
- SAP Hybris的build callback和SAP ABAP的SGEN事務碼UI
- SAP Hybris Commerce的JSP tag和SAP BSP tag的比較JS
- SAP Netweaver和Hybris的資料庫層資料庫
- SAP ABAP和Hybris Commerce的Sample資料
- SAP ABAP Netweaver和Hybris Commerce的部署策略
- SAP 電商雲 Spartacus UI 的 proxy facade 是如何呼叫實際實現類UI
- SAP Hybris使用recipe進行安裝時,是如何執行ant命令的?
- SAP Hybris和ABAP Netweaver裡的DAO(Data access object)Object
- 如何在 SAP Hybris WCMS cockpit 裡建立新的 websiteKPIWeb
- 如何打造高效、安全、協同的指標管理體系?袋鼠雲是這樣做的指標
- Amazon和Netflix的個性化推薦是如何工作的?
- 淺析VO、DTO、DO、PO的概念、區別和用處
- TCP和UDP是如何工作的TCPUDP
- SAP ABAP, Fiori, Android和Hybris裡的非同步操作Android非同步
- 學習java多執行緒,這必須搞懂的這幾個概念Java執行緒
- 遠端工作的這幾年
- SAP Commerce(原Hybris)的訂單處理框架和SAP CRM One Order框架框架
- SAP 電商雲 Spartacus UI Proxy Facade 的一個實際例子UI
- 勒索軟體即服務(RaaS)是什麼?這個模型是如何工作的?模型
- 這20個Docker Command,有幾個是你會的?Docker
- SAP CRM WebClient UI和Hybris backoffice UI開發的相同點WebclientUI
- SAP CRM WebClient UI和Hybris Commerce的懶載入機制WebclientUI
- 網路時延的幾個概念
- 這幾天找工作的經歷
- CRM, C4C和Hybris的工作流簡介
- SAP Hybris Commerce裡的資料庫表資料庫
- ABAP Netweaver, Hybris Commerce和SAP 雲平臺的登入認證
- SAP Netweaver和Hybris Commerce啟動後執行的預設操作
- 淺談SAP CRM和Hybris Commerce裡的價格架構折扣架構
- SAP Hybris的型別系統更改和ABAP的LOAD_PROGRAM_TABLE_MISMATCH型別
- 高效協同企業雲盤為團隊協同帶來更高的工作效率
- 飛項 | 這可能是打工人最需要的協同辦公工具!
- Java中PO、DO、TO、DTO、 VO、 BO、POJO 、DAO的概念JavaPOJO
- 工作這麼多年,我總結的資料傳輸物件 (DTO) 的最佳實踐物件
- 學習筆記:Nest.js 和後端的幾個概念筆記JS後端