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

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

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

术语表/词汇表

随时间和空间别之,不仅仅是程序语言和众人的编码技术,业务语言与常见的交流语言其实也会见改变。虽然在一个一定的行领域里,总会有些大家还知情的名词,然而以软件之产过程被,关键用户、业务顾问、从前凡用户/开发者/业务顾问的首长当人群,毕竟有不同之背景以及阅历,对同样个词的掌握也许连无雷同(具体的原委想必是复杂的,这里不展开讨论)。因为人们的交流是成立于如此不同的根基之上,所以有时候纵然见面难免产生误解和亚效率的交流。大量之交流时,往往会浪费在澄清一个基础概念上,有时甚至因误会造成一定之损失。这种景象在不同的团组织/部门内的交流着越发常见,也特意有害。

大效率的交流该因为定义作为开,而非因定义作为了。为了贯彻这无异于靶,引入词汇表也许是单有利的主意。如果要求描述、开发文档、测试用例等还利用约定好、定义明确的政工词汇,用户、业务顾问、开发期间的联系即不见面起歧义,也可免某些人当写代码时胡乱命名。这样一来,就可知还好地控制词的含义的一致性和转移。由变化引起的保障困难,便由此减轻。

 

没谁单一的方法能维持程序的可维护性,它要负各个面的努力来推动。以上是本人之局部感想。也欢迎大家发表自己对可维护性的眼光,或者对本文的情进行指正。

 

术语表/词汇表

随时间和空中变化的,不仅仅是程序语言和人们的编码技术,业务语言与普通的交流语言其实也会转移。虽然于一个特定的本行领域里,总会有些大家都懂得之名词,然而以软件的生育过程被,关键用户、业务顾问、从前凡用户/开发者/业务顾问的长官等人流,毕竟有着不同的背景和涉,对相同个词之理解也许连无一样(具体的原由可能是扑朔迷离的,这里不展开讨论)。因为人们的交流是立以如此差之根底之上,所以有时即使见面难免产生误解和小效率的交流。大量之交流时间,往往会浪费在澄清一个基础概念上,有时还坐误会造成相当的损失。这种现象在不同之社/部门期间的交流受到越常见,也特别有害。

愈效率的交流应该以定义作为开,而未以定义作为完结。为了促成即时等同对象,引入词汇表也许是独便民的法子。如果要求描述、开发文档、测试用例等都采取约定好、定义明确的工作词汇,用户、业务顾问、开发中的关联即无见面来歧义,也足以避免某些人以形容代码时胡乱命名。这样一来,就能够再次好地控制词的义之一致性与转。由变化引起的维护困难,便由此减轻。

 

尚无孰单一的不二法门能够维持程序的可维护性,它用借助各级面的竭力来推动。以上是自家之一部分感想。也接大家发表自己对可维护性的看法,或者对本文的始末开展指正。