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

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

术语表/词汇表

随时间和空中变化的,不仅仅是程序语言和人们的编码技术,业务语言和一般性的交流语言其实为会改。虽然以一个特定的正业领域里,总会有些大家都亮之名词,然而当软件的生产过程遭到,关键用户、业务顾问、从前凡是用户/开发者/业务顾问的首长当人群,毕竟有着不同的背景与更,对平个词之理解也许连无同等(具体的由恐怕是繁体的,这里不展开讨论)。因为人们的交流是建立在这样不同的功底之上,所以有时即使见面难免产生误解和小效率的交流。大量的交流时间,往往会浪费在澄清一个基础概念上,有时还是以误会造成一定的损失。这种现象在不同的团伙/部门间的交流着进一步常见,也特意有害。

赛效率的交流该因定义作为初始,而非为定义作为了。为了贯彻即时无异目标,引入词汇表也许是只有利于之方式。如果需要描述、开发文档、测试用例等都以约定好、定义明确的业务词汇,用户、业务顾问、开发中的关系就是非会见生出歧义,也堪避某些人以形容代码时胡乱命名。这样一来,就能够重复好地控制词的义之一致性与变化。由变化引起的掩护困难,便由此减轻。

 

并未孰单一的艺术能够保持程序的可维护性,它用依赖各级地方的卖力来促进。以上是本人之有感想。也欢迎大家发表自己对可维护性的视角,或者对本文的内容进行指正。

 

术语表/词汇表

随时间和空中变化的,不仅仅是程序语言和人们的编码技术,业务语言与平常的交流语言其实也会转。虽然以一个特定的行业领域里,总会有些大家都懂之名词,然而以软件的生过程被,关键用户、业务顾问、从前凡用户/开发者/业务顾问的决策者等人流,毕竟有着不同的背景及经验,对同样个词之理解也许连无等同(具体的由可能是繁体的,这里不展开讨论)。因为人们的交流是立以如此差之基础之上,所以有时即使见面难免产生误解和亚效率的交流。大量底交流时间,往往会浪费在澄清一个基础概念上,有时还坐误会造成一定之损失。这种光景在不同的社/部门间的交流着愈发常见,也特意有害。

赛效率的交流该因为定义作为初始,而非因定义作为了。为了贯彻这等同目标,引入词汇表也许是单便民之方式。如果急需描述、开发文档、测试用例等还用约定好、定义明确的事体词汇,用户、业务顾问、开发期间的联络就是非会见来歧义,也得避某些人当写代码时胡乱命名。这样一来,就可知还好地控制词的意义的一致性与转移。由变化引起的保障困难,便通过减轻。

 

并未孰单一的艺术能够保持程序的可维护性,它用依赖各级地方的拼命来促进。以上是自个儿之一对感想。也接大家发表自己对可维护性的理念,或者对本文的始末进行指正。

 

Leave a Comment.