至于程序可维护性的一对设法,关于程序可维护性的一些想法opebet体育

经过若干个独一无二的开发者的修改,经过若干个独一无二的开发者的修改

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(处理数据)了。这种重新有害无益。

这么的笺注过多,大概就是过六人反感注释的来由吗。好的诠释需要出现在成立的岗位,需要写“为啥”而不是“做了怎样”。这仍旧挺考验写作者对程序的精通的,需要有“同理心”,预见读者的需求才得以。

善于编辑器为自动生成的注释模板,比如:

 opebet体育 1

一经是函数、或者类的话,仍可以写专门的文档:

opebet体育 2

写有意义的注释

传闻写程序不写注释是一种很不佳的习惯,也有付出规范约束人们:必须要写注释。注释当然是必不可少的,可是在实践中,大部分人的注释水平是不太好的,往往对阅读起不到什么样正面效果,于是甚至催生了一种反叛的、矫枉过正的见解:好的次第尚未需要注释。

近些年看来的一个出色的不得了的阐明:

*处理数据
PERFORM frm_process_data.

这段代码至少犯了3个错误。

  1. 如以随笔来对待,FROM的名字即是著作的题目,我们不应当在题目中写明标题是标题。彰着,FRM的前缀是无效的,它给不了大家怎么着音信。
  2. “处理多少”似乎是对FORM功效的描述,这一部分内容应该置身FORM的定义处,而不是调用地点。在调用地点的诠释,需要写的是:为啥那个FORM需要在此地被调用?为啥不是调用任何一个看起来相似的FROM?
  3. 在诠释中写“处理数据”这种肤浅之辞日常发生持续什么意义,更毫不说FORM名已经是process
    data(处理多少)了。这种重新有害无益。

诸如此类的诠释过多,大概就是成千上万人反感注释的来头吗。好的声明需要出现在意料之中的职务,需要写“为何”而不是“做了哪些”。这如故挺考验写作者对先后的敞亮的,需要有“同理心”,预见读者的要求才方可。

擅长编辑器为自动生成的诠释模板,比如:

 opebet体育 3

即便是函数、或者类的话,还可以够写专门的文档:

opebet体育 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代码。

术语表/词汇表

随时间和空中变化的,不仅仅是程序语言和人们的编码技术,业务语言和通常的交换语言其实也会变动。即便在一个特定的行当领域里,总会有些我们都晓得的名词,然则在软件的生产过程中,关键用户、业务顾问、在此以前是用户/开发者/业务顾问的经营管理者等人流,毕竟有着不同的背景和经验,对同样个词的知晓也许并不一致(具体的原委或许是复杂的,那里不展开商讨)。因为人们的互换是创设在这么不同的底子之上,所以有时就会难免爆发误解和低功效的交换。大量的互换时间,往往会浪费在澄清一个基础概念上,有时依旧因为误会造成分外的损失。这种气象在不同的集体/部门之间的交流中更是常见,也专门有害。

高效用的交流应该以定义作为先导,而非以定义作为完结。为了贯彻这一目的,引入词汇表也许是个便民的模式。假诺需要描述、开发文档、测试用例等都应用约定好、定义明确的作业词汇,用户、业务顾问、开发期间的牵连就不会有歧义,也得以避免某些人在写代码时胡乱命名。这样一来,就能更好地控制词的意义的一致性和变化。由变化引起的掩护困难,便通过减轻。

 

没有哪个单一的方法能够维持程序的可维护性,它需要靠各方面的卖力来推动。以上是自我的一部分感想。也欢迎我们发布自己对可维护性的眼光,或者对本文的内容举办指正。

 

术语表/词汇表

随时间和空间变化的,不仅仅是程序语言和众人的编码技术,业务语言和通常的交换语言其实也会变动。即便在一个一定的本行领域里,总会有些大家都通晓的名词,然则在软件的生产过程中,关键用户、业务顾问、在此往日是用户/开发者/业务顾问的首长等人群,毕竟有着不同的背景和经历,对相同个词的通晓也许并不平等(具体的来由想必是繁体的,这里不展开探讨)。因为人们的交流是成立在这么不同的根基之上,所以有时就会难免暴发误解和低效率的交换。大量的互换时间,往往会浪费在澄清一个基础概念上,有时仍然因为误会造成非常的损失。这种场地在不同的团社团/部门之间的交流中尤其常见,也专程有害。

高功用的沟通应该以定义作为开头,而非以定义作为完结。为了贯彻这一对象,引入词汇表也许是个便民的不二法门。假诺急需描述、开发文档、测试用例等都使用约定好、定义明确的事务词汇,用户、业务顾问、开发期间的维系就不会有歧义,也可以避免某些人在写代码时胡乱命名。这样一来,就能更好地控制词的意思的一致性和生成。由变化引起的维护困难,便通过减轻。

 

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