关于程序可维护性的有的想法,关于程序可维护性的局部想法

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(Field)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代码。

术语表/词汇表

随时间和空间变化的,不仅仅是程序语言和众人的编码技术,业务语言和常见的沟通语言其实也会变动。尽管在一个一定的行当领域里,总会有些我们都了然的名词,然则在软件的生产过程中,关键用户、业务顾问、以前是用户/开发者/业务顾问的首席执行官等人群,毕竟有着不同的背景和阅历,对相同个词的明白也许并不相同(具体的来头可能是扑朔迷离的,这里不展开研讨)。因为人们的交换是确立在那样不同的功底之上,所以有时就会难免爆发误解和低效能的互换。大量的交换时间,往往会浪费在澄清一个基础概念上,有时甚至因为误会造成一定的损失。这种气象在不同的集体/部门之间的互换中愈发常见,也专门有害。

高效用的交换应该以定义作为开端,而非以定义作为完结。为了贯彻这一目标,引入词汇表也许是个便民的艺术。倘若急需描述、开发文档、测试用例等都采纳约定好、定义明确的业务词汇,用户、业务顾问、开发期间的关系就不会有歧义,也足以避免某些人在写代码时胡乱命名。这样一来,就能更好地控制词的意思的一致性和生成。由变化引起的珍爱困难,便通过减轻。

 

从没哪位单一的格局能够保持程序的可维护性,它需要靠各地点的极力来推进。以上是本人的一对感想。也欢迎我们公布自己对可维护性的见识,或者对本文的情节展开指正。

 

术语表/词汇表

随时间和空中变化的,不仅仅是程序语言和众人的编码技术,业务语言和平常的互换语言其实也会转移。尽管在一个一定的本行领域里,总会有些我们都精通的名词,不过在软件的生育过程中,关键用户、业务顾问、在此之前是用户/开发者/业务顾问的公司主等人流,毕竟有着不同的背景和经历,对同样个词的精晓也许并不平等(具体的原由恐怕是繁体的,这里不展开商讨)。因为人们的互换是起家在如此不同的根基之上,所以有时就会难免发生误解和低功能的互换。大量的交换时间,往往会浪费在澄清一个基础概念上,有时依旧因为误会造成卓殊的损失。这种场所在不同的团体/部门之间的互换中更为常见,也专门有害。

高效用的互换应该以定义作为起先,而非以定义作为完结。为了贯彻这一目的,引入词汇表也许是个便民的点子。假设急需描述、开发文档、测试用例等都使用约定好、定义明确的政工词汇,用户、业务顾问、开发期间的关联就不会有歧义,也足以避免某些人在写代码时胡乱命名。这样一来,就能更好地控制词的意思的一致性和生成。由变化引起的珍爱困难,便通过减轻。

 

从不哪个单一的主意能够保障程序的可维护性,它需要靠各方面的竭力来推进。以上是自家的有些感想。也欢迎我们发表自己对可维护性的观点,或者对本文的情节开展指正。

 

相关文章