终于写到Jerry目前正在做的开发任务了。

2015年的时候,那时Jerry已经做了一年多的SAP UI5开发,想进一步精进自己的开发技能,就申请了一个位于德国Walldorf总部的UI5 Extensibility开发的Fellowship Program,为期6个月。Jerry发了简历给接收Fellowship的团队老板,很快收到回复,团队老板对我的简历很感兴趣,但是表示这个Program没有Relocation Budget,如果我过去,在Walldorf的住宿得我自己掏钱解决。因为这不是商务出差,因此也不会有专门的同事帮我在当地租房。想到这一系列的麻烦,最后我只能放弃。

没想到五年之后,我再次获得了另一个纯前端的开发机会,SAP Spartacus.

什么是Spartacus?Spartacus是SAP Commerce Cloud的Storefront(电商铺面)应用,基于Angular开发而成。

借助SPA(Single-Page-Application)和PWA(Progressive-Web-Application)特性的支持,Spartacus能够提供近似原生应用的用户体验,同时具备高度的可配置性和可扩展性。

先看看Spartacus长什么样。对于国内习惯了网购的朋友来说,无需任何培训就能毫无困难地使用Spartacus进行购物下单,这些操作流程我们已经熟悉得不能再熟悉了。


浏览商品,添加到购物车,支付。

可能大家会觉得上面截图的界面比较朴素,不够美观?前面已经提到,Spartacus具有高度的可配置型和可扩展性,SAP客户可以基于Spartacus开发出具有自己独一无二风格的Storefront应用。

一个成功案例就是,乐高的在线销售Storefront.



Spartacus最显著的两个特点:

  • 开源(https://github.com/SAP/spartacus)
  • 以库文件的形式发布

也就是说,客户只需要新建一个Angular应用,在package.json里添加对SAP Spartacus库文件的依赖,就可以使用上图所示的Spartacus Core和UI Component,开发满足自己实际需求的Storefront了。

下图就是Angular应用中的package.json文件中导入Spartacus的四个依赖库文件的方式:

客户采用这种方式开发而成的Storefront应用,其自开发代码(下图淡黄色矩形框所示)是升级安全的,即自开发代码不会因为Spartacus库文件的版本升级而被覆盖掉。

Spartacus是一个仍在持续开发的项目,目前最新的版本是3.0. 通常情况下,每隔6个月会进行Major版本的更新,比如从2.0到3.0. 每隔6周,会进行Minor版本的更新,比如从2.0到2.1.

对SAP Commerce Cloud有所了解的朋友们都知道,Hybris以前还有一个基于JSP的Accelerator,也能提供浏览店铺商品,加入购物车,结帐支付的功能,那么为什么SAP仍然会启动Spartacus的开发,并在2019年7月正式发布了1.0版本呢?

我的同事张健(Zhang Jonathan)在他的文章 从产品展示页面谈谈Hybris的特有概念和设计结构 里给大家介绍过,Commerce Cloud的前身Hybris是一个monolithic(单体)应用,其中Storefront即Accelerator实现的技术栈是JSP + Java,没有前后端分离的概念。

Accelerator虽然如张健文章里介绍的那样,具有高度可扩展性,但是也存在一些问题:

因为monolithic(单体)应用的特性,Accelerator本身也是Commerce平台的一部分,通过Java调用经Facade Layer作为入口,消费Service Layer的服务:

如下图高亮代码所示:

因此,Accelerator和Commerce平台无法分别进行升级。

另外,SAP官网明确指出,因为SAP以源代码的方式发布Accelerator,作为实施的模板,因此一旦客户开始了Storefront的定制化工作,修改了这些模板的源代码后,就无法再导入针对当前工作版本的Accelerator的bug fix. 这个道理同ABAP Netweaver里面,如果开发人员直接修改了标准代码后,打不了SAP note是一样的。

这也就是SAP官网上称Accelerator为"Extendable but not Upgradable"的原因。

Commerce Accelerator的这些不足,通过2019年诞生的Spartacus Storefront得到了弥补:

100% API-Driven

Spartacus和Commerce后台的所有交互均通过API完成,Commerce API endpoint通过环境变量SPARTACUS_BASE_URL注入Spartacus,如下图所示:

Focused Development

使用Spartacus,SAP Commerce Storefront开发人员只需要专注于Angular开发。前后端分离之后,Storefront的开发,不再需要Accelerator时代的全栈开发模式。

Continious Delivery

以周为单位的patch发布频率,使得持续交付成为可能。同时,客户通过导入Spartacus库文件的方式进行Storefront的二次开发,其定制化代码和Spartacus库文件是独立的实体,可以分别进行升级;Spartacus和SAP Commerce可以分别进行部署,亦可进行各自的升级。

更多关于SAP Spartacus的介绍,请参考openSAP上的公开课.

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

更多阅读

  • 从产品展示页面谈谈Hybris的特有概念和设计结构

  • 从产品展示页面谈谈Hybris系列之二: DTO, Converter和Populator

  • 从产品展示页面谈谈Hybris系列之三:Hybris Service层介绍

SAP Spartacus简介相关推荐

  1. 《走进SAP(第2版)》——2.5 SAP NetWeaver简介

    本节书摘来自异步社区<走进SAP(第2版)>一书中的第2章,第2.5节,作者: [德]Nancy Muir , Ian Kimbell , 等 更多章节内容可以访问云栖社区"异步 ...

  2. 【FI】SAP ODN简介

    SAP ODN简介 在我国,根据凭证装订的需要(通常按月分成"收"."付"."转"类型),财务记账凭证通常都是按月顺序编号的(即每个月都是从 ...

  3. SAP Spartacus 4.0 版本因为 hamburger 依赖导致构建出错的问题

    build from Schematics 遇到错误消息: SassError: Undefined function. https://github.com/SAP/spartacus/issues ...

  4. SAP Spartacus UI 服务器端渲染的调试启动方式 - debug 模式

    首先确认你已经熟悉这篇文章的启动方式:SAP Spartacus develop branch 的服务器端渲染启动方式. 第一步 添加一个新的 build script,把 --configurati ...

  5. SAP Spartacus Session affinity

    参见这个讨论. 后端运行在多个 pods/节点时,当子序列请求过早进入时,后端将无法跨集群发送缓存失效请求.此外,如果多个请求分散在多个节点上,则会消耗延迟和不必要的资源. 对于单个客户端,Spart ...

  6. SAP Spartacus 4.0 的技术变化

    在您迁移到 4.0 版库之前,我们强烈建议您切换到新的应用程序结构和新的功能库. 在多个小步骤中进行迁移更容易(迁移到新的应用程序结构,切换到提取的功能库,然后迁移到 4.0),您可以确保在每一步之后 ...

  7. SAP Spartacus travis ci-scripts 下面 e2e-cypress.sh 的实现分析

    文件地址:https://github.com/SAP/spartacus/blob/develop/.travis.yml 里面引用到了 e2e-cypress.sh: https://github ...

  8. SAP Spartacus 里的 .release-it.json 文件

    在 SAP Spartacus package.json 里有一个依赖叫做 release-it: 这个工具的链接:https://github.com/release-it/release-it 这 ...

  9. SAP Spartacus PageLayoutComponent 如何知道自己应该显示哪些具体内容

    我们以前介绍过,经过 SAP Spartacus 路由配置后的 routes 数组,其 route 数据结构的 Component 属性,清一色指向 generic 的 PageLayoutCompo ...

最新文章

  1. 收藏 | CNN的一些可视化方法!
  2. CCF-CSP 201703-1 试题名称: 分蛋糕
  3. ECMAScript 6 未来前景
  4. 实现运动轨迹_【自动驾驶】运动规划丨速度规划丨时间维度
  5. 如何构建具有实时搜索功能的React Native FlatList
  6. arm+linux+entry.s,linux kernel 之底层中断机制entry_armv.S
  7. Webpack 中 css import 使用 alias 相对路径
  8. code1068 乌龟棋
  9. html%3ca%3e标签改字体颜色,HTML URL Encoding 参考
  10. QQ免费企业邮箱申请配置
  11. 刚刚,联通和华为发布《5G车路协同白皮书》| 附下载
  12. https网站地图生成工具
  13. oracle的insert写法,Oracle中Insert语句的总结
  14. BUUCTF VoIP
  15. 微信转账记录删除了服务器还有吗,微信转账记录能彻底删除吗?你应该知道的删除技巧是这三种!...
  16. oracle参数open_cursors和session_cached_cursor详解
  17. 常见的分布式文件系统介绍
  18. 为什么要禁止除GET和POST之外的HTTP方法?
  19. 点云补全综述 Comprehensive Review of Deep Learning-Based 3D Point Clouds Completion Processing and Analys
  20. 看图猜成语小程序源码

热门文章

  1. 详细解读神经网络十大误解,再也不会弄错它的事情原理
  2. Java的Scanner类的next与nextLine用法区别
  3. 织梦DEDECMS网站批量删除未审核稿件的方法
  4. linux ccenteros 部署 redis
  5. sodu 命令场景分析
  6. 20145202马超《信息安全系统设计基础》实验四总结
  7. Oracle之不可见索引
  8. Handler详解系列(四)——利用Handler在主线程与子线程之间互发消息,handler详解...
  9. java-commons-HttpClient超时设置setConnectionTimeout和setSoTimeout
  10. 数据量大和高并发解决方法