[Clean Code] Chapter 8: 第三方API的使用!

Chapter 8:Boundaries

很多时候我们会使用 第三方包 API 其他部分开发的API 或者 开源软件。
我们应当cleanly 的使用这些外部代码


1-使用第三方代码

代码的提供者需要考虑通用性,但是代码的使用者,则会根据自己的需求希望special的功能。

创建一个关于传感器的map, 则

// 代码1
Map sensors = new HashMap();
...
// 取出 not clean
Sensor s = (Sensor)sensors.get(sensorId );

or
// Map<Sensor> 依然是提供超出我们需求的东西
Map<Sensor> sensors = new HashMap<Sensor>();
...
Sensor s = sensors.get(sensorId );

一种解决办法,

// 代码2
public class Sensors {
    private Map sensors = new HashMap();

    public Sensor getById(String id) {
        return (Sensor) sensors.get(id);
    }
    //snip
}

但是并不是说每次使用map都要这样做,作者推荐不要直接在你的整个系统中直接传map,且避免传给公共API, 或者从API返回

在学习中测试你使用的API接口,确保你返回你要的结果


2-学习 log4j

一个简单的命令行日志,且将系统其余部分与 log4j 隔离开。

public class LogTest {
    private Logger logger;

    @Before
    public void initialize() {
        logger = Logger.getLogger("logger"); logger.removeAllAppenders(); Logger.getRootLogger().removeAllAppenders();
    }

    @Test
    public void basicLogger() {
        BasicConfigurator.configure();
        logger.info("basicLogger");
    }

    @Test
    public void addAppenderWithStream() {
        logger.addAppender(new ConsoleAppender(
            new PatternLayout("%p %t %m%n"), ConsoleAppender.SYSTEM_OUT));
        logger.info("addAppenderWithStream");
    }

    @Test
    public void addAppenderWithoutStream() {
        logger.addAppender(new ConsoleAppender(
            new PatternLayout("%p %t %m%n")));
        logger.info("addAppenderWithoutStream");
    }
}

3-使用还没有开发的代码

项目中,你的项目可以需要和其他的子系统相互配合,但是子系统还没开发完成(也许设计都没完成)。
定义你需要的子系统接口,保证代码clean, 然后预留对子系统API的适配器。

[A] <---> [B API](未开发)

可以分解为
[A] <---> [B]
           |
           +--- [Fake B]
           |
           +--- [B API Adapter] <-- 适配 --> [未来会开发的B API]

4-总结

在测试中学习第三方的接口,保证其输出的确实你想要的结果。
将系统的其余部分与这些Boundaries隔离开,使其中的依赖降到最低(譬如添加Adapter)。这样在以后第三方代码更新的时候,我们的工作量会降到最低。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值