关于程序可维护性的组成部分想法。关于程序可维护性的部分想方设法。

by admin on 2018年10月5日

SAP系统作为店铺之信体系,其生命周期通常是经久不衰的,比单个程序员的在职时而增长得多。早期实施阶段花好气力开的自定义程序,会付出受企业内还是外部的运维团队来保护——不管怎么样,一般不是前期的开发者了。即便是于运维阶段,程序的创建人和修改者也时不是一个人口。不同的开发者,其知识基础、技术水平、编码风格难免有所不同,最早创建的次序,经过几个盖世之开发者的改,可能会见更换得面目全非,失去可维护性。这时的顺序可以说曾接近受死亡…因此,作为序的开发者,我们得被祥和的主次对修改有抵抗力,从而会于后之保护下活的再度长久有。

SAP系统作为企业的消息体系,其生命周期通常是久久的,比单个程序员的在职时而抬高得几近。早期实施阶段花大力气开的自定义程序,会提交给铺内部还是外部的运维团队来保护——不管怎么样,一般不是早期的开发者了。即便是当运维阶段,程序的奠基人和修改者也常不是一个人数。不同之开发者,其知底子、技术水平、编码风格难免有所不同,最早创建的次第,经过多个盖世的开发者的改动,可能会见转移得面目全非,失去可维护性。这时的次可以说已经接近于死亡…因此,作为序的开发者,我们需要给投机的主次对修改有抵抗力,从而能当后人的掩护下活的重漫漫有。

本来,抵抗修改的意思,并无是凭借妨碍后人修改程序。企业的工作是形成的、人们对需求的知晓是时时刻刻深化的,因而程序的改动也是必要的。抵抗修改的目标应该是:在情理之中之急需变动发生时,尽量让修改变得易,并减弱多少修改带来的磨损,从而为程序能够领双重累的修改。

理所当然,抵抗修改的意思,并无是靠妨碍后人修改程序。企业的业务是形成的、人们对需求的敞亮是连连加剧的,因而程序的改也是必要的。抵抗修改的靶子应该是:在情理之中之求变动发生时,尽量让修改变得易,并减弱多少修改带来的毁,从而为程序会领双重累之改动。

本人以为问题之关键在于减少耦合度、理清程序职责的分红,清晰的顺序描述为充分关键:

自家当问题之关键在于减少耦合度、理清程序职责的分红,清晰的次序描述为很重点:

耦合度即模块之间的关联强度。高耦合度的次牵一发而动全身,只适合给需要非常安居乐业之主次。对于形成的ABAP程序来说,降低耦合度可以减少程序修改对任何一些的震慑,是比主要的。

耦合度即模块之间的涉强度。高耦合度的主次牵一发而动全身,只适合给需求异常平静之次第。对于形成的ABAP程序来说,降低耦合度可以削减程序修改对其余一些的震慑,是比较重要之。

惟有的解耦工作发生或被我们陷入为解耦而解耦的骗局。了解程序的任务分配好让咱们进一步理性地使用技术,并且要程序对修改有再度好之适应性。

但的解耦工作起或让咱们陷入为解耦而解耦的牢笼。了解程序的天职分配好为咱尤其理性地用技术,并且只要程序对修改有还好之适应性。

先后的描述包含命名、程序结构这种“自我描述”,也包括程序注释、技术文档,以及要求文档。这可能是极度爱改善的一个方。

程序的叙说包含命名、程序结构这种“自我描述”,也席卷程序注释、技术文档,以及需要文档。这或是最为容易改善的一个上面。

下结合实际的ABAP开发技术来讨论自己对它的想法,因为光是基于自己的片历的来写,可能无是系到的介绍。

下面结合现实的ABAP开发技术来谈谈自己本着它们的想法,因为只是冲自己之有些经历的来写,可能未是网完善的牵线。

 

 

正文链接:http://www.cnblogs.com/hhelibeb/p/7891401.html

本文链接:http://www.cnblogs.com/hhelibeb/p/7891401.html

原创内容,转载请注明出处

原创内容,转载请注明出处

CDS视图

SQL是为洋洋程序员发厌恶的物。过去,由于内表的在,大家照面为此简易的SQL取出较多之数码,然后在内表中拍卖它们,计算主要以应用服务器中展开。但于HANA推出之后,SAP提出了code
pushdown模式,鼓励用重多之做事授数据库服务器来做,也为ABAP的Open
SQL提供了再也强硬的机能。可见日后的SQL将变得日益复杂。在复杂的SQL上展开修改或会见耗时比多、测试困难,有时也会见不小心造成性能问题。ABAP
CDS视图的引入可以比较好之应针对这些题材。如果早期的开发者能够以CDS抽象出稳定的数据模型,把经过几SQL处理的数据作已存在的数量来拘禁,那么即便能简化ABAP程序中的SQL复杂度,同时为降后续之开发者和事务顾问的心智负担和联络成本。

(想同一怀念我们是不是常说这种冗长的话语:XX属性是由此关联A表和B表,使它们的信用社、业务编号与走序号相等,在撤销标识不顶’X’等情形下,获取她的某个平等性能,再至性对诺交之分配表C,获取有效期内的记录——看了并知道这么长一段话之后,也许交流的两岸就注意着理解XX属性究竟如何获得,忘记了好在盘算的另外东西。如果这种涉及逻辑在商店的要求面临是平安之居然不时出现的,我们全好啊它去一个“新歌词”,即CDS视图。基于CDS视图,之后的维系方式得以变成:到视图ZCDSXX中,根据取消标识不顶’X’,获取我们要之XX属性)

CDS视图

SQL是让不少程序员发头痛的事物。过去,由于内表的存,大家照面用简易的SQL取出较多的数目,然后在内表中处理它们,计算主要以应用服务器中展开。但每当HANA推出之后,SAP提出了code
pushdown模式,鼓励用重多的劳作付出数据库服务器来做,也也ABAP的Open
SQL提供了重新强硬的成效。可见日后的SQL将转移得渐渐复杂。在千头万绪的SQL上进展改动或会见耗时比多、测试困难,有时也会无小心造成性能问题。ABAP
CDS视图的引入可以比好的答应针对这些题材。如果头的开发者能够以CDS抽象出稳定的数据模型,把经过多少SQL处理的多寡作为已是的多寡来拘禁,那么就是可知简化ABAP程序中的SQL复杂度,同时也降低后续之开发者和作业顾问的心智负担和联络成本。

(想同一纪念我们是不是不时说这种冗长的讲话:XX属性是经过关联A表及B表,使她的企业、业务编号和移动序号相等,在取消标识不齐’X’等情况下,获取她的有一样特性,再到性对诺到的分红表C,获取有效期内之笔录——看罢并了解这么丰富一段话之后,也许交流之彼此曾注意着理解XX属性究竟如何获得,忘记了协调以思维的另东西。如果这种关系逻辑在公司之急需面临凡是平安的居然经常出现的,我们全然好呢它们去一个“新乐章”,即CDS视图。基于CDS视图,之后的维系方式得以变成:到视图ZCDSXX中,根据取消标识不对等’X’,获取我们需要的XX属性)

硬编码与配置表

旋即两头的原理在将对准程序的修改变为“扩展”,在无干预或于少干预程序代码的景象,完成功能的改观。如果程序的读者看到了序中之枚举或者常量,那么他即使见面掌握这些事物的修改会造成什么的熏陶。一个吓的命名可以帮读者知道它的打算。

ABAP
7.51蒙引入了枚举对象,它对贯彻程序中之数码的一致性有很好之增援,相比常量而言强大许多。在平的场子,可以考虑是否可就此枚举来提高可维护性。

硬编码与配置表

立刻两者的法则在用针对程序的修改变为“扩展”,在不过问或较少干预程序代码的状,完成功能的改观。如果程序的读者看到了次中之枚举或者常量,那么他尽管会理解这些东西的修改会招怎样的影响。一个好之命名可以帮读者了解它们的来意。

ABAP
7.51饱受引入了枚举对象,它对于实现程序中之数码的一致性有大好的救助,相比常量而言强大许多。在平等之场地,可以设想是不是好为此枚举来提高可维护性。

动态技术

动态技术是双刃剑,Field
Symbol和RTTS的动得使我们的先后变得不可开交灵活,但究竟是次的可读性通常不顶好,而且对新手来说呢决是异常不便修改的。因此,我建议尽量将它们看成基础功用的实现,和次序中的硬编码、配置表相结合,或者是透过新建子类的法来促成效益的扩大,并且附以文档,说明程序的壮大方法。尽可能避免受后代直接改动大气下动态技术的顺序。

动态技术

动态技术是双刃剑,Field
Symbol和RTTS的施用可假设我们的主次变得稀心灵手巧,但后果是程序的可读性通常不顶好,而且对新手来说吧决是异常为难修改的。因此,我提议尽量将她作为基础力量的落实,和次序中之硬编码、配置表相结合,或者是经新建子类的法来落实效益的扩充,并且附以文档,说明程序的扩张方法。尽可能避免被后代直接改动大气用到动态技术之次第。

中间层

于制作及其余系统联网的接口时,由于各个地方的来头,会时遇到对方要改接口的输入输出方式或格式的情状。这时候,不是一直提供给对方包含业务处理逻辑的接口,而是建立一个外层接口,把原来的接口包装起来,专门就此来答复对方的修改,是一个吓措施。相似之笔触也可以为此在任何经常转移的地方。

中间层

在打造以及其余系统对接的接口时,由于各国方面的来头,会时时遇到对方愿意改变接口的输入输出方式还是格式的气象。这时候,不是直接提供被对方包含业务处理逻辑的接口,而是建立一个外层接口,把原本的接口包装起来,专门用来解惑对方的改,是一个好点子。相似的思绪为可就此当另外经常改变的地方。

形容来含义的笺注

传闻写序不写注释是如出一辙栽特别不好之习惯,也生开发规范约束人们:必须要描写注释。注释当然是不可或缺的,但是在实践中,大部分人数的注解水平是不极端好的,往往对阅读起未顶什么正面作用,于是甚至催生了相同种反叛的、矫枉过正的看法:好之程序没有需要注释。

前不久收看的一个超人的糟糕的注释:

*处理数据
PERFORM frm_process_data.

眼看段代码至少犯了3个谬误。

  1. 假使以文章来对待,FROM的名即是文章的标题,我们无应该以题目中描写清楚标题是标题。显然,FRM的前缀是废的,它吃不了咱啊消息。
  2. “处理多少”似乎是对FORM功能的叙说,这片情节应当置身FORM的定义处,而无是调用位置。在调用位置的注解,需要写的是:为什么这FORM需要以此给调用?为什么不是调整用任何一个关押起相似之FROM?
  3. 每当诠释中描绘“处理数据”这种肤浅的辞通常有不了什么含义,更不要说FORM名已经是process
    data(处理多少)了。这种重新有害无益。

然的注解了多,大概就是是无数口反感注释的原委吧。好的注释需要出现于客观之位置,需要写“为什么”而无是“做了呀”。这尚是很考验写作者对程序的知道的,需要发出“同理心”,预见读者的需才足以。

善用编辑器为自动生成的注释模板,比如:

 亚洲必赢手机入口 1

如是函数、或者类的语句,还可以描绘专门的文档:

亚洲必赢手机入口 2

描绘有义的注释

传闻写程序不写注释是平种植好不好之惯,也发出规范约束人们:必须使写注释。注释当然是必要的,但是在实践中,大部分人口之诠释水平是免太好的,往往针对读书起免至啊正面作用,于是甚至催生了一样种反叛的、矫枉过正之观点:好的次没有需要注释。

不久前来看的一个天下无双的糟糕的诠释:

*处理数据
PERFORM frm_process_data.

及时段代码至少犯了3独错。

  1. 万一因文章来对待,FROM的讳就是文章的题,我们无应该以题中描写清楚标题是标题。显然,FRM的前缀是低效的,它让无了咱们什么消息。
  2. “处理数量”似乎是针对性FORM功能的讲述,这一部分情应放在FORM的定义处,而休是调用位置。在调用位置的诠释,需要写的凡:为什么是FORM需要以此间为调用?为什么非是调动用外一个扣起相似之FROM?
  3. 于诠释中形容“处理数据”这种肤浅的辞通常有不了啊意义,更毫不说FORM名已经是process
    data(处理数据)了。这种重新有害无益。

这么的笺注了多,大概就是多丁反感注释的由吧。好之诠释需要出现在成立的职,需要写“为什么”而未是“做了什么”。这还是殊考验写作者对先后的知的,需要有“同理心”,预见读者的急需才方可。

工编辑器为自动生成的注释模板,比如:

 亚洲必赢手机入口 3

若果是函数、或者类的说话,还足以描绘专门的文档:

亚洲必赢手机入口 4

擅长异常

好是个坏有因此底东西,但是自己非常少看有ABAP开发者用她。我看到的大部分次下错误码或者失实标识的点子来处理错误。以己之更来拘禁,错误码在单层的调用关系遭遇是比较好用的,但是当多叠的、复杂的景象下,异常比错误代码要再次易于处理及保安。而且很有着较好的我描述能力,这在先后的维护着是大有意义的。而多错误码是止的魔法数字,只有开发者本人知道凡是呀意思,后续维护的口在见到错误代码时,只能认识及:这里出个错误…并无知道每个错误代码的涵义。

善于异常

生是只特别有因此底东西,但是我很少看出ABAP开发者用它。我看来的绝大多数先后行使错误码或者不当标识的方式来处理错误。以自身的经历来拘禁,错误码在单层的调用关系中是比好用底,但是于差不多重合的、复杂的状况下,异常比错误代码要还便于处理和维护。而且非常有着比较好的自己描述能力,这当次的保障着是雅有含义之。而不少错误码是只有的魔法数字,只有开发者本人知道是呀意思,后续维护的食指当见到错误代码时,只能认识及:这里产生个错误…并无知晓每个错误代码的涵义。

免全局变量

全局变量不好,这是富有开发者的共识。之所以专门还要以出其来当一个小节,是因自己觉得是问题莫过于普遍都严重。可能为大部分ABAP二次开发程序还是内容比较少之报表,最常用之ALV报表类(函数)则要求其输入的数内表必须是全局变量,初入行的开发者通常是自全局变量写于底,而正如简单的程序逻辑也受开发者没有领全局变量带来的麻烦….这种惯性使得广大开发者在后来出相对大型的主次时也会大方用全局变量。而先后的跟随者通常没有活力要力来鉴别全局变量对程序的熏陶,从而以窜程序时造成了预想之外的结果。此外,不加释放的全局变量也会见带来性能及的负。所以我认为开发者应该经常想是否可以用部分变量代替全局变量、用价传递代替引用传递,时时注意避免全局变量带来的麻烦。 

避全局变量

全局变量不好,这是享有开发者的共识。之所以专门还要将出她来作为一个小节,是因我觉得这题目实际上普遍还严重。可能为多数ABAP二次开发程序都是情比较少的表格,最常用之ALV报表类(函数)则要求其输入的数额内表必须是全局变量,初入行的开发者通常是由全局变量写起的,而于简单的程序逻辑也给开发者没有接受全局变量带来的麻烦….这种惯性使得许多开发者在之后出相对大型的主次时为会见大量采取全局变量。而先后的维护者通常没有生命力还是能力来鉴别全局变量对先后的影响,从而在改程序时造成了预想之外的结果。此外,不加以释放的全局变量也会见带动性能上之承负。所以我认为开发者应该经常想是否好就此一些变量代替全局变量、用价值传递代替引用传递,时时在意避免全局变量带来的难为。 

开源工具

开发人员在工作中可能会见待一些类库,有时人们见面协调写类库。在投入时自己写类库之前,可以先行找找是否有现成的脍炙人口开源工具。因为个人的物或会见坐文档不齐全或者人员变更变得管人会懂得,也会见让新人比较生之学成本。而好的开源工具的精力更胜似有,也发出再多同行知道该怎么用。

仍,很多人当写用OLE生成Excel的顺序时见面展开得之卷入来拍卖麻烦的call
method
of语句。在这基础及,人们会形成各自的包装方式,阅读彼此的OLE程序时,就可能只要花点时间来观察对方在卷入习惯及之微小区别。但是,如果能运用XLSX
Workbench立马同精美之开源工具,大家就足以经过了一样的措施生成Excel。它采取起来大概、性能优良,并且(在多数景下)可以免写维护起来累的OLE代码。

开源工具

开发人员在工作中可能会见待一些类库,有时人们会协调写类库。在投入时间友好写类库之前,可以先行找是否有现成的好好开源工具。因为个人的事物可能会见以文档不齐全或者人员改变变得无人会懂,也会给新人比较充分的念成本。而好之开源工具的精力更强一些,也闹再多同行知道该怎么用。

依,很多人口于写用OLE生成Excel的次时会展开得之卷入来拍卖麻烦的call
method
of语句。在此基础及,人们会形成各自的包装方式,阅读彼此的OLE程序时,就可能只要花点时间来观察对方在包习惯及之微小区别。但是,如果能以XLSX
Workbench即时同漂亮之开源工具,大家就足以经了一样的办法生成Excel。它采用起来大概、性能优异,并且(在多数景下)可以避写维护起来累的OLE代码。

术语表/词汇表

随时间和空间别的,不仅仅是程序语言和人们的编码技术,业务语言与普通的交流语言其实也会转移。虽然于一个特定的本行领域里,总会有些大家都知晓的名词,然而以软件之生产过程被,关键用户、业务顾问、从前凡用户/开发者/业务顾问的企业主当人群,毕竟有不同之背景与经历,对相同个词的接头也许连无一致(具体的案由恐怕是纵横交错的,这里不展开讨论)。因为人们的交流是建立在这么差之功底之上,所以有时就是会难免产生误解和没有效率的交流。大量的交流时间,往往会浪费在澄清一个基础概念上,有时甚至因为误会造成一定之损失。这种气象在不同的团组织/部门内的交流着越常见,也特意有害。

愈效率的交流应该以定义作为开头,而休以定义作为完结。为了实现即同一对象,引入词汇表也许是个便民的方。如果要求描述、开发文档、测试用例等都运约定好、定义明确的事体词汇,用户、业务顾问、开发中的联络就不见面时有发生歧义,也得避免某些人于写代码时胡乱命名。这样一来,就会还好地控制词的含义之一致性和转移。由变化引起的保障困难,便由此减轻。

 

靡谁单一的主意能保障程序的可维护性,它要靠各个方面的奋力来推进。以上是自家之部分感想。也欢迎大家发表自己对可维护性的意,或者对本文的情开展指正。

 

术语表/词汇表

随时间和空中变化的,不仅仅是程序语言和人们的编码技术,业务语言及普通的交流语言其实呢会变动。虽然当一个特定的行当领域里,总会有些大家都知晓的名词,然而当软件之生育过程遭到,关键用户、业务顾问、从前凡是用户/开发者/业务顾问的主管当人群,毕竟有着不同之背景及经历,对相同个词之解也许并无等同(具体的因由或是纵横交错的,这里不展开讨论)。因为人们的交流是确立在这样差之底蕴之上,所以有时候纵然见面难免产生误解和没有效率的交流。大量的交流时,往往会浪费在澄清一个基础概念上,有时还盖误会造成相当的损失。这种情景在不同的团组织/部门内的交流受到越发常见,也专门有害。

赛效率的交流应该因定义作为开,而非因定义作为完结。为了贯彻即等同对象,引入词汇表也许是单便民的主意。如果急需描述、开发文档、测试用例等还用约定好、定义明确的作业词汇,用户、业务顾问、开发期间的牵连就是非会见有歧义,也堪免某些人以形容代码时胡乱命名。这样一来,就能够再好地控制词的义之一致性和转变。由变化引起的护卫困难,便由此减轻。

 

无哪个单一的点子能够维持程序的可维护性,它用借助各个面的卖力来推动。以上是自身之一部分感想。也欢迎大家发表自己对可维护性的视角,或者对本文的内容进行指正。

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图