云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

服务器_数据库安全防护_返利

小七 141 0

服务器_数据库安全防护_返利

大约两年前,我曾讨论过如何将测试驱动开发和单元测试引入到老式的过程代码中,特别是引入到函数组中。结果是,将功能组更大的重构为OO工件通常是有意义的,但是没有明确的说明,也没有关于如何做到这一点的提示或最佳实践。

一个主要问题是该组对ABAP-OO的了解不足。我再次听到这样一句话:"我们不能使用ABAP-OO,因为我们的开发人员不知道它。"

男孩,在我25年的阿巴平生涯中,我听过多少次这样的事情

恼怒我开始了一个比较,导致了一个较长的演示,包括一些演示。

当我看到一些博客和讨论在这里,我决定把我的个人观点和完全有偏见的观点放到一个小博客里。

注意:

很明显,这个博客系列中描述的过程和建议永远不会覆盖100%。

没有银弹。

与测试

功能模块及其功能组相关的论点是可测试,但与ABAP类不在同一支持级别上。不仅功能组和模块本身的可测试性受到阻碍,而且调用方的测试也受到阻碍。使用接口进行模拟要比使用功能模块容易得多。举例来说,ABAP测试双框架需要全局接口。这将类的创建与测试接缝的使用区分开来。

与架构相关的参数

"针对接口编程"在ABAP-OO中容易得多。函数模块名称是全局唯一的。看到30个字符的长度,好的命名是非常有限的,因为名称空间使用大量的名称。函数模块调用是动态调用,所以语法检查不是在设计时进行的,而是在运行时进行的。方法中的参数类型比函数模块中的参数类型更清晰。没有像表这样的无向参数类型了。表单可以在外部调用,因此这里没有调用限制,从而导致高交叉链接。非常有用的基于ADT的重构工具(比如将代码提取到即时创建的方法中以减少代码重复)只能用于基于类的代码。像BOPF这样的现代和推荐的SAP框架都使用OO构件。从类到过程代码的转换,通常在代码结构中的很多次,增加了代码的复杂性,从而增加了错误概率。

最后,云服务服务器,我想推荐Horst Keller和Andreas Blumenthal在2006年发表的一个系列文章:"编写健壮的、可理解的、可维护的,最先进的ABAP项目";至少这一部分:\u top\u part\u 2.pdf

在说明为什么要迁移之后,我需要提到反对迁移的论点,当然还有任何破坏性重构的论点。

反对破坏性重构的论点

任何重构都有一个问题,即ABAP允许隐式的增强和修改,并且是免费的编程对象的使用。举例来说,没有技术手段禁止任何功能模块的调用(除了授权检查,但仅在运行时检查)。

在blog S4HANA可扩展性概念中,也讨论了这个问题。

不幸的是,没有跨系统的增强编程对象的通用集合。

收集并保存修改在一个系统中,有调查使用情况的工具,但如果一个系统有许多客户/接收者,这是不够的。

因此有两个极端:

如果你想用新的编程对象替换旧的编程对象,从新的版本/SP/FP开始,你不知何故使维护处于危险之中。您必须使新旧连接透明,并且您可能永远不会失去这种透明性。

维护和信息管理都需要相同的否决管理。需要激活调用要重构的代码的用户。同样,返利机器人怎么做,SPAU机制是相关的。

另见"后代工作"一章。

反对功能组迁移的论点

并非所有功能组都可以迁移。有些可以在拆分后迁移。有些程序可能会被迁移,但代码自适应会将此更改连接到大量其他程序。有些迁移会变得过于昂贵。

因此没有一刀切。

生成的功能组无法迁移。对于表视图维护中使用的函数组尤其如此。它们不能迁移,因为这个框架需要功能组并生成自己的代码。

功能组的某些内容可能会妨碍迁移。开发人员应该考虑将这些功能组分开,将可迁移部分与禁止迁移部分分开。

另一种方法是将功能组的内容提取到类中,并将功能模块用作包装器。该方法在"后一代工作-方法1"一章中有详细描述。

功能组可能已经定义了dynpro。ABAP-OO缺乏处理dynpros的能力。这种分割也将遵循模型-视图-控制器的概念。具有禁止迁移到ABAP-OO的技术设置的功能模块。RFC公司这将使导入代码与其他代码分离,从而简化从RFC技术到ODATA的迁移。更新任务更新任务与数据库仿射代码区域相关,因此应该将其分开以确保数据库分层。在禁止迁移到ABAP-OO的框架中使用的功能模块。搜索帮助BDT和其他框架

一些功能组在技术上可能是可迁移的,但会引发很多工作。如果您希望获得一个没有过程代码的包,或者希望获得一个经常使用的callstack clean或其他类似的原因,返利手游平台,那么这可能是可以的。以下段落适用于每一次中断性重构,不仅适用于迁移到ABAP-OO的功能组。

如果功能模块在许多功能组/类/报告中大量使用,则调用方自适应的迁移将导致大量更改的程序。

在这种情况下,迁移的优先级将受到质疑。我建议先处理其他函数组。

如果一个函数组大量使用动态调用,如"call function lv\u function\u name"或"perform('lv\u FORMNAME')in program('lv\u PROGNAME')",则调查工作量可能会非常大。

最好将精力用在其他问题上。

关于OOP的一个词。这个博客不是关于将一个函数组转换成面向对象的。