解依赖与接缝

  接缝(seam)是Michael C. Feathers提出的概念。Feathers在Working Effectively with Legacy Code一书中对接缝的定义如下:

接缝,顾名思义,就是指程序中的一些特殊的点,在这些点上你无需作任何修改就可以达到改动程序行为的目的。

  “接缝”这个词语不太好理解,根据我的理解,大约还是依赖点的含义。通过事先找到依赖点,并采取一定方式解除依赖,就能够改善代码质量,尤其是针对遗留代码而言。准确而言,我们寻找接缝以及解依赖,就是为了代码能够具有好的可重用性与可扩展性,尤其是当我们能解除对其他外部服务的依赖时,可以带来程序的可测试性。

  最近项目组的同事和我讨论了这样一个满足可测试性的问题。项目中需要对返回的响应信息PlatformResponse进行处理,这些信息会根据不同的StatusCode,得到不同的提示或出错信息。为了避免分支语句的判断,同事利用hash table将StatusCode与提示(出错)信息进行了映射,然后根据当前的StatusCode就可以返回对应的结果。返回结果后,还需要调用外部服务对消息进行处理,例如消息的输出。由于之前相关的类PlatformResponse并没有提供这一逻辑,相关服务要返回消息时,直接返回了PlatformResponse对象,然后再由客户端根据当前的StatusCode来判断,输出相关的提示信息,所以同事将这些逻辑写到了扩展方法中,例如定义PlatformResponseHelper静态类:

public static class PlatformResponseHelper {
   
private static HashTable<String,String> messageMapping = //此处略
    public static void Output(this PlatformResponse response) {
        ServiceLocator.Lookup
<IMessageWriter>.Write(messageMapping[response.StatusCode]);
    }
}

it知识库解依赖与接缝,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。