亚洲成av人片在线观看天堂无码,无码成人精品区在线观看,亚洲av少妇熟女猛男,亚洲avav天堂av在线网毛片,无码精品a∨在线观看无广告

SAP Spartacus技術(shù)介紹

SAP技術(shù) 2025-02-18 11:22:25 133閱讀 舉報
這是Jerry 2020年的第86篇文章,也是汪子熙公眾號總共第268篇原創(chuàng)文章。
這篇文章的視頻版本如下:
這個分享是SAP 2020全球技術(shù)大會(SAP TechEd),“客戶自主”時代的極致體驗分論壇內(nèi)容之一:


本文的分享主要分為以下四個方面來介紹Spartacus.
首先,通過Spartacus四大特性的介紹,讓大家對作為SAP Commerce Cloud新一代Storefront這個電商前臺店鋪應(yīng)用有一個直觀的了解。Spartacus的首頁如下圖所示,其logo是一個印有閃電的購物袋,象征著Spartacus能為用戶帶來流暢快捷的在線購物體驗。
其次,通過和Commerce Cloud原有的基于Accelerator技術(shù)的Storefront相比較,讓大家了解SAP推出Spartacus的原因是什么。
緊接著,是Spartacus技術(shù)架構(gòu)的簡要介紹。
最后,可能是SAP Commerce從業(yè)者比較關(guān)心的一個話題,即Spartacus的發(fā)布方式和更新頻率,因為這個話題也和廣大Commerce從業(yè)者是否決定選擇Spartacus密切相關(guān)。


SAP Commerce Cloud是SAP一款電商解決方案,而Storefront這個術(shù)語,指的是該解決方案的前臺店鋪界面。一句話概括Spartacus,它是基于現(xiàn)代Web開發(fā)技術(shù)和框架打造而成的一款新的SAP Commerce Cloud Storefront.
那何謂現(xiàn)代呢?Spartacus 1.0版發(fā)布于2019年7月,因此相比前一代基于Accelerator技術(shù)的Storefront來說,Spartacus具有得天獨厚的優(yōu)勢,能夠采取比較成熟和現(xiàn)代的前端技術(shù)來開發(fā)。


Spartacus特性之一:單頁面應(yīng)用Single Page Application
這也是Spartacus命名的由來。所謂單頁面應(yīng)用,是由一個稱為外殼(shell)的html頁面和多個包含具體業(yè)務(wù)邏輯的頁面片段組成。
Commerce傳統(tǒng)的Storefront,基于JSP實現(xiàn),JSP是一種服務(wù)器端渲染技術(shù),頁面代碼在Commerce服務(wù)器端生成。而單頁面應(yīng)用是一種富客戶端技術(shù),頁面片段的渲染以及頁面路由,放在客戶端完成,這樣減輕了Commerce服務(wù)器的負載。當單頁面應(yīng)用的界面內(nèi)容發(fā)生變化時,不需要重新加載整個外殼html頁面,而僅僅需要更新相關(guān)的發(fā)生變化的頁面片段,這樣較多頁面應(yīng)用相比,頁面之間的切換更加流暢,用戶體驗更好。
Spartacus特性之二:響應(yīng)式設(shè)計和自適應(yīng)設(shè)計
這是web應(yīng)用的用戶體驗領(lǐng)域兩個容易混淆的概念,因為二者都是為了解決網(wǎng)頁在不同屏幕尺寸的設(shè)備上展示的問題。從編程角度講,響應(yīng)式設(shè)計通過各種前端技術(shù),為頁面元素賦予了根據(jù)屏幕分辨率的變化而自動調(diào)整顯示行為,以達到最佳顯示效果的能力。


例如Spartacus里的列表控件,隨著屏幕寬度的減小,顯示的列表欄的數(shù)目也隨之減少。而自適應(yīng)設(shè)計,為不同類別的設(shè)備分別實現(xiàn)不同的頁面,檢測到設(shè)備分辨率后調(diào)用對應(yīng)的網(wǎng)頁。Spartacus的頁面設(shè)計絕大部分是響應(yīng)式布局,但也支持自適應(yīng)布局的特性。
Commerce的CMS模塊將Storefront UI按照功能上的邏輯相關(guān)性,劃分成不同的區(qū)域,而Spartacus可以允許使用者根據(jù)不同的屏幕尺寸,配置在該尺寸下,不同的區(qū)域內(nèi)應(yīng)該顯示哪一些UI組件。


Spartacus特性之三:100% API 驅(qū)動
Commerce Cloud提供了一組稱為Omni Commerce Connect(簡稱OCC)的Restful API.
Spartacus通過標準的HTTP協(xié)議調(diào)用這組API,實現(xiàn)同Commerce Cloud交互的目的。從編程層面來說,100%的API驅(qū)動確保了Spartacus的前后端分離,使得Spartacus的二次開發(fā)人員不需要去了解Commerce平臺Java層的實現(xiàn)細節(jié),而過去基于Commerce Accelerator技術(shù)的Storefront二次開發(fā),需要的是會使用JSP和Java的全棧開發(fā)者。
從更深層次來說,100% API驅(qū)動使Spartacus同Commerce平臺也解除了緊耦合關(guān)系,從而極大提升了Spartacus的可升級性。這一點在接下來Accelerator同Spartacus的對比中我們會進一步說明。
Spartacus特性之四:開源,免費
Spartacus的代碼是完全開源的,托管在Github上。如果大家細心察看Github倉庫上的代碼提交者列表,就會發(fā)現(xiàn),這些代碼貢獻者有的是像Jerry這樣的SAP職員,有的來自partner公司,還有freelancer即自由職業(yè)者。SAP選擇將Spartacus開源,希望構(gòu)建出一個繁榮的生態(tài)圈,和開源社區(qū)里其他貢獻者共同在Commerce Storefront領(lǐng)域進行持續(xù)創(chuàng)新。


那么,SAP為什么要推出Spartacus呢?這得從Spartacus誕生之前,SAP Commerce傳統(tǒng)的Storefront實現(xiàn)技術(shù)即Accelerator說起。


Accelerator是Spartacus發(fā)布之前,SAP Commerce Cloud使用的Storefront實現(xiàn)技術(shù)。
Accelerator是一個開箱即用的web實現(xiàn)模板,是Commerce平臺的一部分,以源代碼的方式交付給客戶??蛻敉ㄟ^一個叫做module generator的工具,基于Accelerator 模板代碼生成自己的Storefront實現(xiàn),然后基于這些生成的代碼繼續(xù)二次開發(fā)。這種源代碼生成方式確實能加快客戶的Storefront二次開發(fā)速度,這也是Accelerator命名的由來。
然而,Accelerator這種同Commerce平臺的緊耦合關(guān)系,以及基于源代碼級別的二次開發(fā)方式,給Commerce項目實施的可升級性帶來很大的挑戰(zhàn)。例如,當客戶發(fā)現(xiàn)新版本的Accelerator能滿足自己新的業(yè)務(wù)需求時,希望升級Accelerator. 然而由于Accelerator是Commerce平臺的一部分,所以必須先升級整個Commerce系統(tǒng),再使用module generator基于高版本的Accelerator代碼,重新生成自定義實現(xiàn),再把基于低版本Accelerator模板而進行的二次開發(fā)內(nèi)容,逐一手動地遷移到高版本Accelerator生成的自定義實現(xiàn)中去。
當Commerce的二次開發(fā)達到一定規(guī)模量的時候,這種手動升級的方式很挑戰(zhàn)。


Accelerator具有的這些缺陷,在Spartacus問世之后都迎刃而解。
Accelerator通過源代碼的方式提供了一個Storefront的開發(fā)模板,而Spartacus則以庫的方式,提供了一個輕型的Storefront開發(fā)框架。我們新建一個Angular應(yīng)用,導(dǎo)入對Spartacus庫的依賴,當我們需要升級Spartacus時,只需要更新Angular應(yīng)用的package.json文件里Spartacus庫文件的版本號即可,因此Spartacus從可升級性上來說是一個巨大的飛躍。
Spartacus采用API的方式同Commerce交互,這使得Spartacus可以同Commerce分開部署,分別進行升級,比如目前已經(jīng)發(fā)布的Spartacus 3.0,支持從Commerce 1905開始及其之后的所有版本。 Spartacus采用Angular開發(fā),編譯之后生成JavaScript代碼,作為其運行時語言。這樣一來,使用Spartacus的二次開發(fā)人員,不再需要像過去開發(fā)Accelerator那樣,不再需要掌握前端JSP和后端Java的全棧開發(fā)技術(shù)棧。
Accelerator的可擴展性,是通過犧牲可升級性為代價換來的。同Accelerator只有源代碼級別的修改這一單一的擴展方式相比,Spartacus實現(xiàn)擴展性的手段更加多元化。
(1) Spartacus的模塊之一,ConfigModule,將業(yè)務(wù)邏輯和頁面布局以及樣式,通過配置的方式暴露出來。二次開發(fā)人員通過調(diào)整配置,可以更改Spartacus默認的行為和頁面布局以及樣式。
(2) Spartacus的頁面布局由不同的Angular組件組成,這些Angular組件同Commerce的CMS組件具有一一對應(yīng)關(guān)系。Spartacus允許二次開發(fā)人員增強甚至開發(fā)新的Angular組件,去替換Spartacus發(fā)布時使用的默認組件,以此來實現(xiàn)客戶的頁面定制化需求。
(3) 借助Angular強大的依賴注入機制,Spartacus允許開發(fā)人員像Commerce后臺開發(fā)人員使用Java Spring框架那樣,開發(fā)自己的service實現(xiàn)。通過Angular的Dependency Injection機制,注入自開發(fā)的service,從而達到定制化Spartacus的運行流程和邏輯的目的。
下面我們來簡要了解Spartacus使用到的一些技術(shù)棧和Spartacus同Commerce交互的基本原理。


前面說到,Spartacus是基于現(xiàn)代Web開發(fā)技術(shù)打造而成的一個Storefront開發(fā)框架。因此,涉及到的技術(shù)棧都是目前前端開發(fā)普遍使用的一些比較成熟的技術(shù)。
Angular:由Google維護的一款web前端開發(fā)框架,借鑒了大量有十幾二十年歷史的成熟的后端開發(fā)理念,比如依賴注入、接口、注解等等,這些理念在開發(fā) 需要持續(xù)迭代和維護的大規(guī)模企業(yè)級前端應(yīng)用時,顯得特別有優(yōu)勢。Angular同時也是一款與時俱進的框架,比如對TypeScript的支持,跟RxJS的深度整合,對Progressive Web Application即 漸進式網(wǎng)頁應(yīng)用理念 第一時間的支持等等。
Spartacus 1.0基于Angular 9,而目前最新的Spartacus 3.0, 基于Angular 10. 上個月Google發(fā)布了最新的Angular 11,目前我們團隊的架構(gòu)師,正在評估Spartacus支持Angular 11的技術(shù)可行性。
TypeScript: Angular的開發(fā)語言是TypeScript,ES5, ES6是JavaScript發(fā)展過程中出現(xiàn)的兩個版本,而TypeScript不僅是ES6的超集,而且是一門靜態(tài)類型編程語言。2018 年有一份前端項目中出現(xiàn)頻率最高的十大錯誤類型統(tǒng)計報告,其中前7位都和類型錯誤有關(guān):


而TypeScript的編譯器 靜態(tài)類型檢查,可以避免不少的類型錯誤。通過強類型接口,在服務(wù)實現(xiàn)者和服務(wù)調(diào)用者之間創(chuàng)建了一種契約,這種契約能降低Spartacus組件和服務(wù)之間的耦合性,幫助像Spartacus這種 其開發(fā)者來自世界各地的開源項目 進行更有效率地開發(fā)。
Rxjs: Reactive Extension JavaScript,是一種響應(yīng)式編程實踐,Angular是RxJS這個庫的重度使用者。Rxjs的核心是Observable(可觀察對象),Spartacus的實現(xiàn),使用Rxjs的可觀察對象,封裝了從Commerce讀取業(yè)務(wù)數(shù)據(jù)的異步操作。通過Rxjs提供的施加在可觀察對象上的各種操作符,Spartacus可以靈活地控制 異步讀取 Commerce業(yè)務(wù)數(shù)據(jù)的時序,對Spartacus和Commerce之間的數(shù)據(jù)流進行聚合或者拆分。
Ngrx: Angular應(yīng)用使用的一個能夠優(yōu)雅的管理應(yīng)用狀態(tài)的庫。Angular和其他主流的前端框架一樣,遵循組件化開發(fā)的標準,組件間通信基本都是單向數(shù)據(jù)流:父組件通過屬性綁定把數(shù)據(jù)傳遞給子組件,子組件如果想要修改傳入的數(shù)據(jù),必須通過事件回調(diào)同父組件通信。NgRx作為通信場景里的第三方,能夠統(tǒng)一管理組件的狀態(tài),降低了Spartacus這類復(fù)雜前端應(yīng)用組件間狀態(tài)管理的復(fù)雜度和出錯的可能。
SASS:Syntactically Awesome Stylesheets的縮寫,是一種CSS的擴展語言,在CSS基礎(chǔ)上增添了定義變量,支持代碼塊嵌套,繼承,命名空間,父級引用等特性,大大提高了css的開發(fā)效率??梢哉fSpartacus能夠支持從頁面整體顏色風(fēng)格,到控件外觀 細粒度的微調(diào),SASS功不可沒。
Jasmine:一個前端單元測試框架。 Cypress:一個端到端的自動化測試框架。
我們通過完善的單元測試和端到端自動化測試,保障了Spartacus這種開源項目的代碼質(zhì)量。
最后,我們開發(fā)出的Spartacus,經(jīng)過打包后,以庫的形式發(fā)布到http://npmjs.com上去。


這是一張Spartacus同Commerce交互的示意圖。我們首先看圖的最右邊。Spartacus同Commerce系統(tǒng)的通信,通過HTTP協(xié)議調(diào)用OCC API完成。Connector是HTTP調(diào)用的發(fā)起者,維護了靜態(tài)的配置信息,即API的endpoint.
比如,從Commerce系統(tǒng)讀取產(chǎn)品主數(shù)據(jù),讀取的字段列表以url參數(shù)的形式出現(xiàn)在API endpoint里。這些字段列表可以在Connector的靜態(tài)配置點里進行配置。Connector并不會直接同Commerce交互,而是把請求轉(zhuǎn)發(fā)給Adapter,具體通信由Adapter完成,Connector只負責(zé)調(diào)度Adapter. Spartacus發(fā)布的Adapter默認使用OCC Module,即Commerce標準的OCC Restful API,但是客戶也可以實現(xiàn)自己的Adapter,連接Commerce之外的其他后臺系統(tǒng)。
Connector將Adapter取回的數(shù)據(jù)交給NgRx的store結(jié)構(gòu)統(tǒng)一管理,后者的復(fù)雜度被Fa?ade層所隱藏,而Spartacus UI組件只會同F(xiàn)a?ade層交互,進行數(shù)據(jù)綁定和頁面展示。這體現(xiàn)了關(guān)注點分離的設(shè)計原則。最后,因為UI組件和Commerce后臺組件的數(shù)據(jù)模型存在差異,因此需要Converter,在數(shù)據(jù)從Commerce取回,準備呈現(xiàn)在UI之前,先要通過Converter轉(zhuǎn)換成適合UI展示的結(jié)構(gòu);反之,在Spartacus提交數(shù)據(jù)準備寫回Commerce時,也要先將數(shù)據(jù)通過Converter轉(zhuǎn)換成OCC API接受的數(shù)據(jù)格式。
那么Spartacus github倉庫里的源代碼,通過什么方式發(fā)布給客戶使用呢?
前面已經(jīng)提到,Spartacus打包之后,以庫的方式發(fā)布到http://npmjs.com上。這是一張Spartacus庫文件之一,Spartacus Storefront托管到npmjs網(wǎng)站上的截圖。這個庫的版本號為2.1.3, 我們稍后會介紹其版本機制。


Spartacus庫主要有三個實體組成:core, storefront和styles. 其中storefront包含了用戶肉眼可見的,組成電商店鋪應(yīng)用外觀的UI組件,客戶可以重用和增強這個庫文件里包含的組件。Core這個庫文件則包含了Spartacus的控制邏輯。用戶可以開發(fā)自己的服務(wù)類,通過Angular依賴注入的機制,把自開發(fā)服務(wù)類注入到core框架之中。Styles包含了Spartacus的界面樣式實現(xiàn),客戶可以對這些樣式進行定制化,或者用自開發(fā)樣式來覆蓋標準樣式。


之前進行Accelerator和Storefront的可升級性比較時已經(jīng)提到過,客戶基于Spartacus庫文件進行Storefront二次開發(fā),并不會直接修改Spartacus發(fā)布的源代碼??蛻舻亩伍_發(fā)代碼,和Spartacus庫文件是一種松耦合的依賴關(guān)系。客戶升級Spartacus版本,在絕大多數(shù)情況下都不會影響到已有的二次開發(fā)代碼。那么所謂的“絕大多數(shù)情況下”,具體是指什么呢?這就要從Spartacus的版本管理機制說起。


同絕大多數(shù)流行的開源框架和庫一樣,Spartacus的版本管理也采取了所謂語義化版本的機制,版本號由主版本號,次版本號和修訂版本號三部分組成,中間由小數(shù)點分隔開。
主版本號的升高,用于引入無法向后兼容的變更或顛覆性的更新。無法向后兼容的變更,是指Spartacus升級之后,之前基于低版本編寫的二次開發(fā)代碼,需要人工調(diào)整后才能繼續(xù)工作。而顛覆性的更新,一個例子就是Spartacus升級到3.0版本之后,首次支持B2B的電商功能。


次版本號的增加:用于引入新功能,并且版本更新之后,已有的二次開發(fā)代碼不需任何調(diào)整仍然能夠繼續(xù)正常工作。源代碼重構(gòu),性能優(yōu)化等不屬于bug修復(fù)的修改,也通過次版本號的增加而引入。 修訂版本號:主要用于發(fā)布bug的修復(fù)。
Spartacus的修訂版本發(fā)布,以周為單位,確保使用過程中發(fā)現(xiàn)的bug能盡早得到解決。次版本的發(fā)布以月為單位,這種更新的頻率有助于客戶快速地進行持續(xù)改進和持續(xù)創(chuàng)新。 而主版本的更新,可以參考SAP官方路線圖網(wǎng)站上的聲明。


從上面這張截圖中package.json里定義的依賴,我們能夠發(fā)現(xiàn)之前講到的core, storefront和styles 3個庫,再加上主要包含了文檔和翻譯的assets庫。
其中版本號2.1.0之前的這個符號^,有個術(shù)語叫做hat, 這是語義化版本管理機制里的范圍標識符之一,表示這個Storefront二次開發(fā)工程支持主版本號為2,且次版本號大于1的所有Spartacus版本,但是不支持主版本號為3的Spartacus. 換句話說,圖中這個二次開發(fā)項目,只支持SAP Commerce B2C的功能,因為B2B的功能是Spartacus 3.0版本里才引入的。


最后,讓我們用一些關(guān)鍵字來總結(jié)今天的分享。SAP Spartacus誕生于2019年7月,是一款滿足響應(yīng)式和自適應(yīng)特性的現(xiàn)代Storefront應(yīng)用和開發(fā)框架。同之前的Accelerator Storefront相比,Spartacus在保留了原有的可定制化特性之外,具有更流暢的用戶體驗和良好的可升級性,并且本身開源,無需購買額外的license. 如果大家對Spartacus有興趣想深入了解,可以去open SAP網(wǎng)站上學(xué)習(xí)Spartacus的公開課.

版權(quán)聲明:
作者:
鏈接:http://www.1717online.cn/p/1727e814501d09.html
來源:SAP技術(shù)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以點擊 “舉報”。


登錄 后發(fā)表評論
0條評論
還沒有人評論過~
SAP這些服務(wù)是干嘛用的
問答 1 位網(wǎng)友回復(fù)
詢問下EWM倉庫任務(wù)相關(guān)問題
問答 1 位網(wǎng)友回復(fù)
可以不啟用容差組嗎?
問答 1 位網(wǎng)友回復(fù)
SAP里反記賬是什么意思?
問答 1 位網(wǎng)友回復(fù)