当前位置: 首页 > news >正文

我做SAP CRM One Order redesign的一些心得体会

  1. 框架开发和应用程序的开发完全不一样。

举个具体的最近折腾我的例子: 创建新的service order,维护header的shipping data,此时order和shipping data的mode 都是creation,然后创建line item,添加product,header的shipping data带到line item,然后在line shipping data做修改,item的mode变成了change,此时不存盘,直接删除该item,然后马上另外创建一个item,继续编辑,此时第二个item的mode是creation,前一个item的change mode变为deletion,然后再删除第二次加的line item,不存盘,再创建第三个project,维护一些数据,存盘。此时我代码里的buffer处理会出问题,存到DB确实有一条item数据,但是已经corrupt掉了。 由于我buffer 处理logic有bug, 我花了很大功夫最后发现是第二次被删除的那条数据的内容被错误存到了DB里:

1240

我甚至花了大量的时间来找重现这个错误的办法,因为最初我是偶然的机会发现这个错误,但是没留意我的操作,最后才找到能稳定复现问题的步骤,赶紧记录下来:

1240

这个buffer处理的bug直接导致了今天三个新bug:

1240

这就是框架开发的难度。如果是做应用,可以和PO商量,哪个客户吃饱了做这种操作?不支持。但是这些操作从Oneorder框架的角度来看,无非就是create, update和delete三个local buffer的处理罢了,没有任何理由不支持这种sequence的操作。
反过来说,当developer经过一段时间努力之后能够自如地应对这些挑战,从这些bug中抽丝剥茧定位问题,给出correction,他的开发能力一定能得到很大提升。

Developer对于自己编程能力的提升是没有止境的,我来之前本早已对自己的编程能力非常自信,但是经过这21天的开发,我还是造了一共40个bug出来。但我最终都fix了他们,每解决一个bug就像以前Wuji老师用游戏打比方一样,获得一定经验值。bug越难经验值越高。

1240

  1. 我做这个POC确实是全神贯注拿出全部精力去做,就这样都还生产了这么多bug,确实很烧脑。我每踩一个坑,都会用Jerry : timestamp这种格式写下注释. 如果用Jerry做关键字搜索,能发现34处坑:

1240

每一处坑趟过之后都增加了我对one order的理解,我把这些bug当作我的一笔财富。比如看这个"this code is ugly"的注释,点进去看:

1240

确实很ugly,这恰恰就是fix注1里提到那个buffer更新bug的correction的一部分,加了注释估计没接触过one order的人也看不懂。

我们拿成都现在已经完成一部分的product harmonization为例来看:7531行代码。

1240

而这个POC,做到今天是第21天,代码量已经超过product harmonization一半了。
请看其中我highlight的这个class,是我的搭档IMS写的,他从2010年开始做One order。这个class 到现在写了921行,就为了实现一个功能:把partner的数据从新表里读出来,放到对应的buffer里去。为什么有921行?因为buffer的插入很有讲究。

1240

我每天吃饭,骑车的时候都在想这些buffer的东西。这个redesign的关键用三个词来概括的话,就是buffer, buffer, buffer.

2017-05-15 9:45PM

Model redesign target

One order model redesign主要发生在下图我画的黑色方框内的模块,

1240

下列是需要完全重新开发, 而非harmonization的内容

  1. 新的数据库表。每个object type一张表,比如BUS2000116是Service process,有且仅有一张header 表,BUS2000131是sales item,有且仅有一张item表

  2. 围绕这些数据库表的CRUD API.
    简单的说,就是这两件事。当然和One order 框架的复杂程度相关。

Scope

其中有9个component是硬骨头,当前POC已经done了两个,我用黄色标记。

1240

现有的POC,整体框架已经搭起来了,one order在新的model下已能正常工作,productive实现除了上述提到的7个硬骨头之外,不存在做不出来的东西和Feature. 当然,根据大家这么多年的开发经验,POC不可能100%暴露productive开发的所有问题。

概括起来说,就是我们不需要从头空想一套东西来实现,一切以现有的POC为基础,这也是Carsten现在对这个POC非常重视的原因,每个方法,每行代码,在他力所能及可以抽出时间review的时候,他都不放过。

开发这个事情并不是说工作认真负责就能deliver高质量的代码。打个不恰当的例子,我和Oliver工作都很认真,但我们还是生产了38个bug.

1240

和Carsten一起工作一个月,我对他工作风格的体会:一方面,他review你东西的时候非常仔细,非常注重细节,包括我之前举的例子,比如某方法是在LOOP里call还是外面call好,method的参数设置等等。另一方面,对于什么才是正确的design,他往往只给出大方向,overall的思路,但不会具体到可以直接拿来实现那么细的粒度,比如他不会告诉你为了实现他的思路,需要几个class,每个class几个方法,每个方法参数如何定义。他这种工作方式make sense,因为Chief Architect不需要把事情拆分这么细。这样就造成我最近按照我自己的理解去实现他那些思路,所以经常返工,refact.

1240

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

转载于:https://www.cnblogs.com/sap-jerry/p/10505512.html

相关文章:

  • 解决ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)【亲测有效】...
  • 设计模式笔记(4)---生成器模式(创建型)
  • bootstrap
  • C语言单链表实验
  • 2018-11-10 专栏全年主题合辑-代码中文命名相关实践
  • 2009年全国软考网络规划设计师考试大纲
  • 字符串操作、文件操作,英文词频统计预处理
  • 摘抄《天龙八部》诗词回目
  • php项目命名规范
  • Jupyter Notebook不能在系统命令行里全局启动
  • php的基本内容
  • xpath获取一个标签下的多个同级标签
  • [笔记].I2C札记
  • 力扣——找数左下角的值
  • JavaScript之数组的常用操作函数
  • 【译】JS基础算法脚本:字符串结尾
  • Apache Pulsar 2.1 重磅发布
  • ES2017异步函数现已正式可用
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • JavaScript标准库系列——Math对象和Date对象(二)
  • js继承的实现方法
  • MobX
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • Xmanager 远程桌面 CentOS 7
  • 产品三维模型在线预览
  • 类orAPI - 收藏集 - 掘金
  • 聊聊hikari连接池的leakDetectionThreshold
  • 如何优雅地使用 Sublime Text
  • 【云吞铺子】性能抖动剖析(二)
  • NLPIR智能语义技术让大数据挖掘更简单
  • ​2020 年大前端技术趋势解读
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #vue3 实现前端下载excel文件模板功能
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (0)Nginx 功能特性
  • (2)nginx 安装、启停
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (WSI分类)WSI分类文献小综述 2024
  • (二)构建dubbo分布式平台-平台功能导图
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (一)80c52学习之旅-起始篇
  • (一)Neo4j下载安装以及初次使用
  • (一)VirtualBox安装增强功能
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)菜鸟学数据库(三)——存储过程
  • (转载)CentOS查看系统信息|CentOS查看命令
  • *1 计算机基础和操作系统基础及几大协议
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .bashrc在哪里,alias妙用