3

如何使用OO和函数式两个方法实现重构? - DZone

 1 year ago
source link: https://www.jdon.com/60626
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

如何使用OO和函数式两个方法实现重构? - DZone
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
    interface Converter<T, R> {
        R serialize(T var1);
    }

有了一个函数接口,我们创建了两个Converters:json 和 xml。它们都将匹配定义的签名(对象输入和字符串输出)。

   final static Converter<Object, String> JSON_CONVERTER = (object) -> {
        Gson gson = new Gson();
        return gson.toJson(object);
    };

    final static Converter<Object, String> XML_CONVERTER = (object) -> {
        XmlMapper xmlMapper = new XmlMapper();
        try {
            return xmlMapper.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return null;
    };

 


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK