我有一个与特定 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/