麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

請求路由到業務方法設計(1)-我們到底能走多遠系列(43)

2019-11-15 00:32:17
字體:
來源:轉載
供稿:網友
請求路由到業務方法設計(1)-我們到底能走多遠系列(43)

我們到底能走多遠系列(43)    常規的web項目,比如用sPRingmvc這種框架,要來將某個url的請求指定到某個 Controller里的某個方法,這個方法負責將具體的業務完成即可。這件事我們熟悉不過,可是它是怎么做到的,也可以翻看源碼閱讀。像這種,需要完成路由工作的事情在實際項目中可能也會出現,其實任何一個需要處理請求的框架都需要解決這個問題。先拋出問題,后續文章用一個例子來完整設計一個方案。還有可以看一下其他各種框架都是如何解決這個問題的,值得研究。簡化這件事情:我們就干一件事,哪就是如何在處理請求時,安排對應的具體的業務方法來執行。1,用一個map,把對用的請求中key(假設傳的事json,里面有個key,來表示什么業務),和對應的類關聯起來,2,用模版方法,把圖中三個流程串起來,其中業務處理子類實現,每個子類都有一個doservice方法3,處理請求時都會解析json,拿到key,再從map中取出指定的實例,執行doservice方法即可。代碼簡略如下:請求假設先到達RemoteOpenServiceImpl的executeOpenService方法,直接路由找到要執行的業務實例。
public interface RemoteOpenService {    public JSON executeOpenService(JSON json, String method);}public class RemoteOpenServiceImpl implements RemoteOpenService{    @Override    public JSON executeOpenService(JSON json, String method) {        JSON returnJson = null;        BaseService service = (BaseService) OpenServiceRouter.getRouterMap().get(method);        returnJson = service.execute(json, ExampleRequest.class);                return returnJson;    }    }
OpenServiceRouter:
public class OpenServiceRouter {    private static Map<String, Object> routerMap;        public static Map<String, Object> getRouterMap(){        if(routerMap != null){            return routerMap;        }        routerMap = new HashMap<String, Object>();        routerMap.put("example", "exampleService");        return routerMap;    }        }

模版方法設計:實際執行的時service的excute方法,而這個方法執行中把業務部分的實現留給子類實現。

public interface BaseService {    public JSON execute(JSON json, Class c);}public abstract class AbstractBaseService implements BaseService{    // TODO    public final Request decode(JSON json, Class c){        ObjectMapper mapper = new ObjectMapper();        Request request = null;        try {            request = mapper.readValue(json.toJSONString(), c);        } catch (JsonParseException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (JsonMappingException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }         return request;    }    // TODO    public final JSON encode(Response response){        ObjectMapper mapper = new ObjectMapper();                  // Convert object to JSON string          JSON json = null;        try {            String j =  mapper.writeValueAsString(response);            json = JSON.parSEObject(j);        } catch (JsonGenerationException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (JsonMappingException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return json;    }        /**     * 子類不同實現具體邏輯     * @param request     */    public abstract Response doService(Request request);        /**     * 模版執行方法     * @param json     */    public final JSON execute(JSON json, Class c){        Request request = this.decode(json, c);        Response response = doService(request);        JSON retrunJson = this.encode(response);        return retrunJson;    }}

子類的實現:

public class ExampleServiceImpl extends AbstractBaseService{    @Override    public Response doService(Request request) {        ExampleRequest exampleRequest = (ExampleRequest)request;                return null;    }}
因為剛好需要設計一個這樣的被調用的組件,我就想好多地方會遇到這個場景,所以值得深入進來研究一下,以上是我想,不參考任何框架,以最原始的方式去實現一個這樣的請求路由。作為筆記的一部分,先開個頭,后續研究下其他框架對這個問題的設計。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 91av资源在线| 日韩视频在线一区二区三区 | 久草在线免费看 | 亚洲精品xxx | 一级毛片在线观看视频 | 国产自在线 | 久久经典 | 欧美精品一区二区中文字幕 | 在线中文日韩 | 一级空姐毛片 | h色视频在线观看 | 欧美雌雄另类xxxxx | 一级性色 | 免费看一级视频 | 成人wxx视频免费 | 久草在线观看福利 | 毛片视频网站在线观看 | 久久久亚洲欧美综合 | 神马久久蜜桃 | 日本在线国产 | 久久综合综合 | 亚洲欧美不卡视频 | 艹男人的日日夜夜 | 男女羞羞视频 | 蜜桃一本色道久久综合亚洲精品冫 | 免费一级毛片网站 | 久久精品一二三区白丝高潮 | 一级成人欧美一区在线观看 | 私库av在线免费观看 | 偷偷操偷偷操 | 九九热精品在线 | 久久久国产精品网站 | 污片在线观看视频 | 最新亚洲视频 | 国产剧情在线观看一区二区 | 中国大陆一级毛片 | 久久久久久久九九九九 | 精品国产91久久久久久 | 久在线播放 | 国产在线精品一区二区三区不卡 | 成人小视频在线播放 |