关于程序可维护性的部分想法爱博体育,关于程序可维护性的有些想法

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中引入了枚举对象,它对于落实程序中的数据的一致性有很好的援救,相相比较常量而言强大许多。在同样的场所,能够考虑是否能够用枚举来提升可维护性。

动态技术

动态技术是双刃剑,FieldSymbol和RTTS的应用可以使大家的先后变得不得了灵活,但结局是先后的可读性日常不太好,而且对新手来说也断然是很难修改的。因而,我指出尽量把它当作基础功用的贯彻,和顺序中的硬编码、配置表相结合,或者是由此新建子类的主意来落实效益的扩大,并且附以文档,表明程序的扩充方法。尽可能避免让后人直接改动大气使用动态技术的次序。

动态技术

动态技术是双刃剑,FieldSymbol和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代码。

术语表/词汇表

随时间和空中变化的,不仅仅是程序语言和人们的编码技术,业务语言和常见的沟通语言其实也会转移。即便在一个一定的行当领域里,总会有些我们都晓得的名词,但是在软件的生产过程中,关键用户、业务顾问、在此以前是用户/开发者/业务顾问的经营管理者等人流,毕竟有着不同的背景和阅历,对同一个词的精通也许并不均等(具体的案由或许是复杂的,这里不展开钻探)。因为人们的交换是建立在这样不同的底子之上,所以有时候就会难免爆发误解和低效能的交换。大量的互换时间,往往会浪费在澄清一个基础概念上,有时依然因为误会造成一定的损失。那种情形在不同的团队/部门中间的交换中越发常见,也专程有害。

高效用的交流应该以定义作为起先,而非以定义作为完结。为了落实这一对象,引入词汇表也许是个有利于的艺术。假若急需描述、开发文档、测试用例等都使用约定好、定义明确的作业词汇,用户、业务顾问、开发期间的牵连就不会有歧义,也足以避免某些人在写代码时胡乱命名。这样一来,就能更好地控制词的意思的一致性和转移。由变化引起的维护困难,便由此减轻。

 

并未哪位单一的艺术可以维持程序的可维护性,它需要靠各地点的不竭来促进。以上是自己的部分感想。也欢迎我们公布自己对可维护性的理念,或者对本文的始末展开指正。

 

术语表/词汇表

随时间和空间变化的,不仅仅是程序语言和众人的编码技术,业务语言和通常的沟通语言其实也会变动。尽管在一个特定的本行领域里,总会有些大家都知情的名词,不过在软件的生育过程中,关键用户、业务顾问、在此此前是用户/开发者/业务顾问的集团主等人流,毕竟有着不同的背景和经历,对同样个词的知情也许并不一致(具体的由来可能是扑朔迷离的,这里不展开琢磨)。因为人们的交换是确立在这么不同的基础之上,所以有时就会难免暴发误解和低效率的交换。大量的互换时间,往往会浪费在澄清一个基础概念上,有时依然因为误会造成很是的损失。这种情景在不同的集团/部门期间的沟通中尤为常见,也特意有害。

高效用的互换应该以定义作为开首,而非以定义作为完结。为了促成这一目标,引入词汇表也许是个有利于的主意。假如急需描述、开发文档、测试用例等都采取约定好、定义明确的事务词汇,用户、业务顾问、开发期间的维系就不会有歧义,也足以制止某些人在写代码时胡乱命名。这样一来,就能更好地控制词的意思的一致性和转变。由变化引起的护卫困难,便通过减轻。

 

从不哪个单一的点子能够维持程序的可维护性,它需要靠各地方的努力来促进。以上是自个儿的局部感想。也欢迎我们发表自己对可维护性的意见,或者对本文的情节展开指正。

 

相关文章