防腐层

182 阅读2分钟

大家在做项目中是否有过这样的经历,你的项目中需要调用一个外部服务接口,而这个外部服务接口需要在你的项目中的不同地方被多次使用,比如在公司项目中就出现调用下面获取用户详细信息的外部的接口多达10几次。 一旦这个外部接口发生变化,那么是不是意味着我就要修改这几十处的地方,简直头大。
那我们是不是可以对外部接口做一层适配封装,隔离这种可能地、不可控的变化。

SessionUser getUserDetail(String username)SessionUser getUserDetail(String username)
@Component
public class UserManager() {

    @Autowired
    private UserApi remoteUserApi;

    public UserDTO getUserDetail(String username) {
        SessionUser sessionUser = remoteUserApi.getUserDetail(username);
        UserDTO user = convertUser(sessionUser);
        return user;
    }
}
@Component
public class UserManager() {

    @Autowired
    private UserApi remoteUserApi;

    public UserDTO getUserDetail(String username) {
        SessionUser sessionUser = remoteUserApi.getUserDetail(username);
        UserDTO user = convertUser(sessionUser);
        return user;
    }
}

我们让系统中的业务层从原来直接调用remoteUserApi.getUserDetail(String username)改为调用UserManager#getUserDetail(),这样哪怕有一天外部接口的返回内容、方法名发生变化,我们也只需要修改一下这一个地方,而无需修改上层调用的十几处地方。 另外,我们还可以再这一层加入更多的功能,比如参数校验,日志打印等等。
防腐层是一种软件架构模式,用于隔离系统或应用程序的不同部分,以避免一个部分的变化影响到其他部分。这个概念最初源于领域驱动设计(Domain-Driven Design, DDD),用于保护系统核心领域不受外部模块变化的负面影响。
通俗的说,我们认为外部系统、接口、中间件等都是腐烂的,不可控的,我们需要添加一层去做隔离和防腐,被叫做防腐层。
(之前不理解为什么我们ck组的所有对外接口都在真实调用的接口上面又封装了一层。应该是防腐层。。)