如何使用OO和函数式两个方法实现重构?
Java 中的重构有很多方面,但其中有两个基础:面向对象和函数式。面向对象几乎从第一个 Java 版本开始就存在,而函数式只出现在 Java 1.8(2014 年 3 月)中。
Java 是一种经典的面向对象语言,允许创建灵活的对象结构。在 Java 1.8 获得功能特性之后,它不仅可以使用对象或方法,还可以使用lambdas(它本身就是可执行代码)进行操作。在函数世界中,您可以像在 OO 世界中使用对象一样操作函数。
重构最佳实践:
使用面向对象的方法将性质相似的对象统一在一个结构中
使用函数方法来统一函数相似的代码。它们一起使代码的可读性和可维护性显着提高。
使用 OO 方法重构代码
使用继承或组合来处理接口和类,您可以创建可重用的通用解决方案,从而减少代码量并提高可读性。类可以在相同的公共结构中联合,如果它们:
具有相似的字段并被识别为同一实体
有关系父母/孩子
有类似目的的方法
使用函数式方法重构代码
与 OO 方法不同,这种方法提取具有相同行为的代码。例如,我们可以在下一个示例中识别相似之处:
实现具有相同的返回类型
实现具有相同的函数
假设我们有一个小型应用程序,它向永久和合同员工付款。每次付款后,我们都会打印一份报告Employee并显示不同格式的数据(永久和承包商的 JSON 和 XML)。
案例使用的代码 可在此处获得。
Contractor和Employee有类似结构
Contractor可以重构成为Employee类的孩子
上面这段代码中还有相似的功能:转换到JSOn和转到XML:
我们传递一个对象并返回一个字符串。因此,我们可以将该代码提取为一个可重用的函数,并将其动态地用于此业务逻辑,甚至在它之外使用。
为了决定正确的 函数接口(例如,Predicate、Consumer、Function 等),我们需要检查我们的输入和输出。在我们的例子中,我们得到一个Object 并将其转换为String。
@FunctionalInterface |
有了一个函数接口,我们创建了两个Converters:json 和 xml。它们都将匹配定义的签名(对象输入和字符串输出)。
final static Converter<Object, String> JSON_CONVERTER = (object) -> { |