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

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中引入了枚举对象,它对于贯彻程序中的数据的一致性有很好的帮衬,相比较常量而言强大许多。在同等的场馆,可以考虑是不是可以用枚举来升高可维护性。

动态技术

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

术语表/词汇表

随时间和空间变化的,不仅仅是程序语言和人们的编码技术,业务语言和常常的沟通语言其实也会改变。固然在一个特定的本行领域里,总会有些大家都知道的名词,可是在软件的生育进度中,关键用户、业务顾问、以前是用户/开发者/业务顾问的管理者等人群,毕竟有着分化的背景和经历,对相同个词的知道也许并不等同(具体的由来想必是繁体的,那里不展开研究)。因为人们的沟通是创建在这么分化的底蕴之上,所以有时就会难免暴发误解和低成效的调换。多量的调换时间,往往会浪费在澄清一个基础概念上,有时依旧因为误会造成万分的损失。那种情景在差距的集团/部门中间的沟通中愈发常见,也专门有害。

高功能的交换应该以定义作为开首,而非以定义作为已毕。为了落到实处这一目的,引入词汇表也许是个有利于的措施。如若急需描述、开发文档、测试用例等都拔取约定好、定义明确的事体词汇,用户、业务顾问、开发时期的联络就不会有歧义,也足以避免某些人在写代码时胡乱命名。那样一来,就能更好地控制词的意思的一致性和转变。由变化引起的护卫困难,便通过减轻。

 

尚无哪位单一的不二法门可以有限支撑程序的可维护性,它要求靠各地点的大力来推进。以上是自己的部分感想。也欢迎大家揭橥自己对可维护性的见解,或者对本文的内容开展指正。

 

术语表/词汇表

随时间和空间变化的,不仅仅是程序语言和大千世界的编码技术,业务语言和一般性的沟通语言其实也会变动。即使在一个一定的行业领域里,总会有些大家都通晓的名词,然则在软件的生产进度中,关键用户、业务顾问、在此之前是用户/开发者/业务顾问的集团主等人流,毕竟有着分歧的背景和经历,对同样个词的精通也许并不相同等(具体的原因或者是错综复杂的,那里不展开研究)。因为人们的调换是起家在这么差其他基础之上,所以有时候就会难免爆发误解和低成效的调换。多量的调换时间,往往会浪费在澄清一个基础概念上,有时甚至因为误会造成相当的损失。那种光景在不一致的集团/部门中间的互换中国和越南社会主义共和国发常见,也专程有害。

高功能的互换应该以定义作为起首,而非以定义作为落成。为了落成这一指标,引入词汇表也许是个方便的不二法门。要是急需描述、开发文档、测试用例等都采取约定好、定义明确的政工词汇,用户、业务顾问、开发期间的联系就不会有歧义,也足以幸免某些人在写代码时胡乱命名。那样一来,就能更好地控制词的意义的一致性和转移。由变化引起的保险困难,便由此减轻。

 

从没哪个单一的形式可以维持程序的可维护性,它要求靠各地点的竭力来推动。以上是自己的部分感想。也欢迎咱们发布自己对可维护性的见地,或者对本文的始末进行指正。

 

Leave a Comment.