至于程序可维护性的有的想方设法。关于程序可维护性的有设法。

经过若干个独一无二的开发者的修改,经过若干个独一无二的开发者的修改

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代码。

术语表/词汇表

随时间和空间别的,不仅仅是程序语言和众人的编码技术,业务语言和平凡的交流语言其实为会见转。虽然以一个一定的行业领域里,总会有些大家还晓得之名词,然而当软件的产过程遭到,关键用户、业务顾问、从前凡是用户/开发者/业务顾问的领导当人群,毕竟有着不同之背景及阅历,对同样个词之解也许并无均等(具体的原故或是繁体的,这里不展开讨论)。因为人们的交流是成立于这么差之基础之上,所以有时候即使见面难免产生误解和没有效率的交流。大量之交流时,往往会浪费在澄清一个基础概念上,有时甚至以误会造成相当的损失。这种场面在不同之团组织/部门期间的交流中益常见,也特意有害。

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

 

没有谁单一的法子能保障程序的可维护性,它要依赖各个方面的奋力来推进。以上是我的一对感想。也欢迎大家发表自己对可维护性的意,或者对本文的情开展指正。

 

术语表/词汇表

随时间和空中变化的,不仅仅是程序语言和人们的编码技术,业务语言及普通的交流语言其实呢会改。虽然当一个特定的正业领域里,总会有些大家都知情的名词,然而在软件之生过程中,关键用户、业务顾问、从前是用户/开发者/业务顾问的长官等人流,毕竟有不同的背景和经验,对同个词的亮也许连无一样(具体的缘由或者是纵横交错的,这里不展开讨论)。因为人们的交流是起在这么不同的功底之上,所以有时候便会难免产生误解和小效率的交流。大量的交流时,往往会浪费在澄清一个基础概念上,有时甚至以误会造成一定之损失。这种气象在不同的团队/部门之间的交流被越来越常见,也专程有害。

大效率的交流该因为定义作为开头,而不因定义作为了。为了兑现就同一靶,引入词汇表也许是个好之点子。如果需要描述、开发文档、测试用例等还施用约定好、定义明确的作业词汇,用户、业务顾问、开发期间的关系即未会见发生歧义,也足以免某些人在描写代码时胡乱命名。这样一来,就能重复好地控制词的意思的一致性与变化。由变化引起的掩护困难,便通过减轻。

 

没哪位单一的方法能保持程序的可维护性,它需要靠各级面的全力来推动。以上是自身的部分感想。也接大家发表自己对可维护性的见,或者对本文的情节进行指正。