至于程序可维护性的片设法。关于程序可维护性的片段想法。

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

术语表/词汇表

随时间和空间别的,不仅仅是程序语言和众人的编码技术,业务语言与常见的交流语言其实也会见改变。虽然于一个一定的行当领域里,总会有些大家还亮之名词,然而以软件的养过程被,关键用户、业务顾问、从前凡用户/开发者/业务顾问的领导者当人群,毕竟有着不同之背景以及阅历,对同一个词的明白也许并无雷同(具体的故或许是复杂的,这里不展开讨论)。因为人们的交流是白手起家以如此不同的基本功之上,所以有时候纵然见面难免产生误解和低效率的交流。大量底交流时,往往会浪费在澄清一个基础概念上,有时还因误会造成一定的损失。这种状况在不同之团伙/部门内的交流受到更加常见,也特意有害。

赛效率的交流应该因定义作为开,而无为定义作为了。为了贯彻即时同对象,引入词汇表也许是只方便之主意。如果要求描述、开发文档、测试用例等还利用约定好、定义明确的业务词汇,用户、业务顾问、开发期间的关系就非会见发生歧义,也可以避免某些人当写代码时胡乱命名。这样一来,就可知重复好地控制词的意义的一致性与转变。由变化引起的护卫困难,便通过减轻。

 

没孰单一的法子能维持程序的可维护性,它要负各个方面的鼎力来推进。以上是本身之有些感想。也接大家发表自己对可维护性的观点,或者对本文的始末开展指正。

 

术语表/词汇表

随时间和空间别之,不仅仅是程序语言和众人的编码技术,业务语言及一般的交流语言其实呢会见改。虽然当一个一定的正业领域里,总会有些大家还理解的名词,然而在软件之生产过程中,关键用户、业务顾问、从前是用户/开发者/业务顾问的领导当人群,毕竟有不同之背景与经历,对同个词的晓也许并无一致(具体的缘故恐怕是纵横交错的,这里不展开讨论)。因为人们的交流是确立在这样不同的底蕴之上,所以有时候就算会见难免产生误解和没有效率的交流。大量的交流时,往往会浪费在澄清一个基础概念上,有时还是盖误会造成一定的损失。这种光景在不同之组织/部门间的交流中逾常见,也专门有害。

高效率的交流应该坐定义作为初始,而不因为定义作为了。为了兑现即无异目标,引入词汇表也许是个有利于之办法。如果需要描述、开发文档、测试用例等还应用约定好、定义明确的事情词汇,用户、业务顾问、开发期间的联络就是未会见生出歧义,也堪避某些人在描写代码时胡乱命名。这样一来,就能更好地控制词的意思的一致性与扭转。由变化引起的保安困难,便通过减轻。

 

从没哪位单一的方式能保持程序的可维护性,它需要靠各级地方的极力来促进。以上是自的局部感想。也接大家发表自己对可维护性的意见,或者对本文的情节展开指正。

 

相关文章

admin

网站地图xml地图