SOA下的MOCK接口

現在都在講SOA,很多公司也是這麼做的,這樣做的好處我就不再這裏重複了。SOA帶來這些優點的同時也帶來了很大的困擾,特別是在開發環境下,接口不穩定、頻頻掛掉,有時開發環境不如線上的數據那麼豐富,想要的數據要不到,嚴重影響開發的進程。這種痛苦,想想就淚兩行。哭歸哭,哭夠了,就得想一個下次不哭的方法。

在考慮解決方案時,我想盡可能的簡單,儘可能的不侵入代碼,於是想來想去,就下定決心要用配置的方式。在死了N多腦細胞的時候,我終於想到,下面就是我的方案,使用的是spring的注入機制。

1. 項目結構如下:


項目結構的關鍵是mock和線上的接口除了上一級包之外都是一致的,這樣就可以通過配置包名稱注入不同的類

2. 接口如下:

public interface InterfaceService {

    String mockInterface();
}

3. 接口實現如下:

mock的接口:

public class InterfaceServiceImpl implements InterfaceService {
    @Override
    public String mockInterface() {
        return "這是一個mock的接口";
    }
}


正式的接口

public class InterfaceServiceImpl implements InterfaceService {
    @Override
    public String mockInterface() {
        return "這是一個線上的接口";
    }
}



4. 配置文件(這個是重點):

 <bean id="interfaceService" class="com.xten.mock.service.${interface_type}.InterfaceServiceImpl"></bean>

這個的關鍵是將他的上一層包通過配置文件進行配置,那麼就可以很簡單的切換接口的環境,又不侵入到業務邏輯。

正式環境配置:interface_type=impl

mock環境配置:interface_type=mock

5. 測試用例如下:

public class MockTest {

    public static void main(String[] args){

        try {
            ApplicationContext context = new ClassPathXmlApplicationContext("spring/mock/mock.xml");
            InterfaceService interfaceService =context.getBean(InterfaceService.class);
            System.out.println(interfaceService.mockInterface());
        } catch (BeansException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }


    }
}



各位可以自行測試一下。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章