至于程序可维护性的一部分设法,关于程序可维护性的一对设法

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

术语表/词汇表

随时间和空中变化的,不仅仅是程序语言和人们的编码技术,业务语言和普通的交换语言其实也会改变。即使在一个特定的本行领域里,总会有些我们都知情的名词,不过在软件的生育过程中,关键用户、业务顾问、以前是用户/开发者/业务顾问的领导者等人群,毕竟有着不同的背景和经历,对同样个词的了解也许并不雷同(具体的原故恐怕是纵横交错的,这里不展开研讨)。因为人们的沟通是创立在这么不同的功底之上,所以有时就会难免发生误解和低效用的交换。大量的交换时间,往往会浪费在澄清一个基础概念上,有时依旧因为误会造成非凡的损失。这种气象在不同的集体/部门中间的互换中尤其常见,也特别有害。

高效能的交流应该以定义作为开端,而非以定义作为完结。为了兑现这一对象,引入词汇表也许是个便宜的方法。假诺要求描述、开发文档、测试用例等都利用约定好、定义明确的作业词汇,用户、业务顾问、开发期间的关系就不会有歧义,也足以制止某些人在写代码时胡乱命名。这样一来,就能更好地控制词的意思的一致性和转变。由变化引起的护卫困难,便通过减轻。

 

没有哪位单一的法子可以维持程序的可维护性,它需要靠各方面的大力来推动。以上是自身的片段感想。也欢迎大家揭橥自己对可维护性的见地,或者对本文的内容举办指正。

 

术语表/词汇表

随时间和空间变化的,不仅仅是程序语言和众人的编码技术,业务语言和一般的交流语言其实也会改变。虽然在一个一定的正业领域里,总会有些我们都晓得的名词,然则在软件的生产过程中,关键用户、业务顾问、往日是用户/开发者/业务顾问的经营管理者等人流,毕竟有着不同的背景和经历,对同样个词的通晓也许并不雷同(具体的原由或许是复杂的,这里不展开探究)。因为人们的交换是起家在这么不同的底子之上,所以有时候就会难免暴发误解和低效能的交换。大量的互换时间,往往会浪费在澄清一个基础概念上,有时甚至因为误会造成一定的损失。这种气象在不同的团队/部门中间的交换中更是常见,也专程有害。

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

 

从不哪个单一的点子能够保障程序的可维护性,它需要靠各方面的竭力来推动。以上是自我的一部分感想。也欢迎我们发布自己对可维护性的眼光,或者对本文的内容举行指正。

 

相关文章

admin

网站地图xml地图