<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    寫程序,做產品,過日子

    成功其實很簡單,就是強迫自己堅持下去

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      69 Posts :: 1 Stories :: 92 Comments :: 0 Trackbacks

    Spring和AOP像一個強力的粘合劑,將完全獨立開發的組件(或說是模塊,下同)粘合成一個有機的,完整的,可擴展的系統。正是有了這個粘合劑的幫助,才實現了比較徹底的獨立組件開發。

    說它是“比較徹底”,是因為它極大的減少了組件之間的依賴。在你開發一個組件時,基本上不會因為其它組件沒有開發完成,或出現Bug而影響到你的進度。

    但是,它并沒有完全消除開發時組件之間的依賴,你仍然得依賴于其它組件提供的API接口。為此,我們不得不把一個組件拆成兩個jar包:一個component-api.jar,一個component-impl.jar。由于api包內全是公用接口和Value Object,所以它相對穩定,可以早早的提供出來。這樣,一個組件如果要使用另一個組件的服務,在開發階段,只須依賴于api包即可。運行時,Spring再根據服務提供組件的配置信息找到正確的實現類。

     

    昨天,我們在一個討論會上發現了一個有趣的問題:

    組件UIA是一個UI組件,它要求提供一些數據,于時它把自己的要求寫時接口ProviderA中。組件C1和C2是兩個不同的業務組件,它們的UI中都有使用UIA這個組件,而它們都提供了自己的數據接口ServiceC1和ServiceC2。

    ProviderA所要求的方法,在ServiceC1和ServiceC2中都有提供。這個時候怎么做才能使各個組件完獨立呢。

    一、讓ServiceC1和ServiceC2繼承于ProviderA。但是這樣將導致業務組件依賴于UI組件。有誰知道一共有多少個UI組件需要依賴???而且UI組件是最易變的。

    二、把ProviderA從uia.jar抽出來,放到單獨的uia-api.jar中。這個就未免小題大做了。一個系統少說也有幾十個UI組件,難道要生成上百個jar包不成?

    三、把所有的UI的要求的API都抽出來,放到一個ui-api.jar中。這樣jar包是少了,可是單個的UI組件就失去獨立性了。

    上面三個方案,不管怎么管理UI組件的接口,都沒有解決業務組件依賴于不定數目的UI組件這個問題。

     

    最后,我們采用的方法是:把UI組件視為某個業務組件的子組件,UI組件自己不定義接口。所有對外的接口和對UI的接口,都放在業務組件的api包中。

    這樣做,業務組件和UI組件都依賴于api包,互相之間沒有依賴。當然,這樣做,UI組件就不能游離于大的業務組件之外。而我們采用這個方案的原因也在于,我們認定為多個組件提供服務的UI組件是很少的。

     

    顯然我們采用的方法只是就事論事的一個折衷方案。并沒有解決服務提供者和消費者之間的交叉依賴。

    要解決這種交叉依賴,我的思路是再提供一個接口之間的粘合機制。消費者定義自己要求的服務接口,提供者定義自己提供的服務接口。最后用一個配置文件,將二者粘合起來。

    目前,Spring還沒有提供這種功能。

    posted on 2007-05-11 10:00 Welkin Hu 閱讀(1200) 評論(9)  編輯  收藏 所屬分類: Java

    Feedback

    # re: Spring斷想:接口粘合[未登錄] 2007-05-11 10:36 小木
    哥們兒說的不錯啊,頂一個  回復  更多評論
      

    # re: Spring斷想:接口粘合 2007-05-11 10:37 dennis
    接口之間的黏合?我覺的這里的場景應該是adapter模式應用的地方  回復  更多評論
      

    # re: Spring斷想:接口粘合 2007-05-11 13:05 Welkin Hu
    @dennis
    Adapter模式仍然是用java類和接口來表達的,它沒法完全消除開發時的依賴。  回復  更多評論
      

    # re: Spring斷想:接口粘合 2007-05-11 16:37 fullqin
    apache下的hivemind是基于接口粘合,可以去看看  回復  更多評論
      

    # re: Spring斷想:接口粘合 2007-05-11 18:00 dennis
    @Welkin Hu
    依賴轉移到xml文件,轉移到火星,它仍然存在。我一直覺的xp的簡單原則是對這種場景的最好考量。依賴這個東西不可能消除,再深究下去就over-engineering了。我們講松耦合,而不是“無”耦合。  回復  更多評論
      

    # re: Spring斷想:接口粘合 2007-05-11 20:57 Welkin Hu
    @dennis
    你的觀點我是贊同的。即便Spring真的提供了這個功能,我們在使用時也會審慎的考較它:是真的節省開發成本了,還是增加開發成本了?
    如果有限度的,謹慎的使用接口粘合特性,應當是節省開發成本的。如果大張旗鼓的用,那十有八九是增加成本。
    我只是覺得對于我在文章中所舉的案例,確是一個需要接口粘合機制的東東。

    @fullqin
    真是只有想不到,沒有做不到。以前零星聽聞過Hivemind的大名。有機會一定研究一把。  回復  更多評論
      

    # re: Spring斷想:接口粘合 2007-05-13 04:41 wolfsquare
    說得不是很清楚,但我直覺這樣的問題不是來自于依賴,而是設計方案導致的。
    【組件C1和C2是兩個不同的業務組件,它們的UI中都有使用UIA這個組件】
    從這個情形來看,后面的業務組件C1和C2其實應該是組合出來或是繼承出來,
    而從經驗的角度看,可能以組合的方式更靈活一些。  回復  更多評論
      

    # re: Spring斷想:接口粘合 2007-05-14 09:10 Coffee and Tea
    這是語言的問題,動態語言接口不必靜態聲明,因此就不需要有獨立的接口jar包。
    但是這也有兩面性,如果缺少編譯時檢測,那么必須要加強其他手段防止接口錯誤,比如持續集成。  回復  更多評論
      

    # re: Spring斷想:接口粘合 2007-05-14 09:19 Welkin Hu
    @Coffee and Tea
    嘻嘻,我的想法就是想給Java加點兒動態特性。當然,前提是不影響性能。  回復  更多評論
      

    主站蜘蛛池模板: 67pao强力打造国产免费| 中文在线免费不卡视频| 曰批视频免费40分钟试看天天| 亚洲欧洲中文日韩av乱码| 亚洲AV成人片无码网站| 国产美女精品视频免费观看| 涩涩色中文综合亚洲| 永久免费AV无码网站在线观看| 亚洲精品自偷自拍无码| 日本一区免费电影| 黄页网址在线免费观看| 亚洲精品国产成人影院| 国产免费内射又粗又爽密桃视频 | 精品一区二区三区高清免费观看| 国产伦一区二区三区免费| 一级毛片aa高清免费观看| 亚洲熟妇中文字幕五十中出| 永久在线观看免费视频| 亚洲ⅴ国产v天堂a无码二区| 69视频在线是免费观看| 亚洲av无码久久忘忧草| 免费羞羞视频网站| 一区二区三区免费在线视频| 亚洲精品V欧洲精品V日韩精品| 中文字幕免费视频一| 亚洲色偷精品一区二区三区| 亚洲国产精品无码久久青草| 成年免费a级毛片免费看无码| 久久久久久亚洲AV无码专区| 最近中文字幕无吗免费高清| 一级毛片大全免费播放下载| 中文亚洲AV片不卡在线观看| 1000部国产成人免费视频| 亚洲av无码日韩av无码网站冲| 国产亚洲成人在线播放va| 4455永久在线观免费看| 狠狠综合亚洲综合亚洲色| 亚洲精品无码mv在线观看网站| av无码免费一区二区三区| 黄色a三级三级三级免费看| 亚洲成年轻人电影网站www |