java - 需要帮助改进紧耦合设计

标签 java junit

我有一个与特定 BPM 供应商合作的内部企业应用程序 (EJB2)。内部应用程序的当前实现涉及拉入仅由供应商 API 公开的对象,并通过 API 中公开的方法对其进行更改。

我在想我需要以某种方式将一个内部对象映射到这个外部对象,但这似乎太简单了,我不太确定执行此操作的最佳策略。谁能阐明他们过去是如何处理这种情况的?

我想对这家供应商的软件进行“黑匣子”处理,以便在需要时轻松替换它。从设计的角度来看,以某种方式将内部对象映射到这个公开的 API 对象的最佳方法是什么?请记住,我的内部应用程序仍然需要与 API 通信,因此两者之间会有一些依赖性,但我想减少它,以便我也可以使用 junit 独立于该软件进行测试。

谢谢, 杰森

最佳答案

为服务层创建一个接口(interface),在内部您的所有代码都可以使用它。然后制作一个使用该接口(interface)并调用第三方 api 方法并作为 api 门面的类。

interface IAPIEndpoint {
    MyDomainDataEntity getData();
}

class MyAPIEndpoint : IAPIEndpoint {

    public MyDomainDataEntity getData() {
        MyDomainDataEntity dataEntity = new MyDomainDataEntity();
        // Call the third party api and fill it
        return dataEntity;
    }
}

与第三方 API 接口(interface)总是一个好主意,这样您就不会让他们的恐惧侵入您的应用程序域,并且您可以根据需要换出。您可以制作另一个完全使用不同服务的类实现。

要在您调用的代码中使用它

IAPIEndpoint endpoint = new MyAPIEndpoint(); // or get it specific to the lang you are using.

当它跨越多个实现时,基于接口(interface)制作你的东西是可行的方法。它也适用于 TDD,因此您可以将接口(interface)换成本地测试接口(interface),该接口(interface)可以完全独立于第三方 API 检查您的域代码。

关于java - 需要帮助改进紧耦合设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4608302/

相关文章:

java - 水波纹效果错误(Java Opengl)

java - 在没有字符串比较的情况下以数学方式查找数字子字符串

java - 线程中的异常 "main"java.lang.NullPointerException Java 错误

java - 使用 Mockito 对 Junit 中的私有(private)函数进行单元测试

java - if 条件与 JUnit 的假设有何不同?

java - 在java中只运行线程一分钟

java - 如何将数组列表从适配器传递到 fragment ?

java - pom.xml Maven 配置以在混合 Java + Kotlin 项目中运行 JUnit 4 + JUnit 5 Jupiter 测试

java - Android PointF 构造函数在 JUnit 测试中不起作用

java - 比较两个 throwable 的正确方法是什么?