<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加點兒動態特性。當然,前提是不影響性能。  回復  更多評論
      

    主站蜘蛛池模板: 免费看美女被靠到爽| 99在线在线视频免费视频观看 | 一级毛片人与动免费观看| 日韩免费高清视频网站| 亚洲欧美国产国产综合一区| 毛片视频免费观看| 亚洲高清中文字幕免费| 好大好深好猛好爽视频免费| 亚洲三级高清免费| 永久黄网站色视频免费观看| 亚洲精品无码国产片| 免费又黄又爽又猛的毛片| 理论秋霞在线看免费| 亚洲欧洲日产国码高潮αv| 一级做a爰全过程免费视频毛片| 在线亚洲人成电影网站色www| a级毛片无码免费真人久久| 亚洲成a人片77777老司机| 1024免费福利永久观看网站| 亚洲免费综合色在线视频| 国产jizzjizz视频免费看| 中文字幕av免费专区| 亚洲大片在线观看| 成年性羞羞视频免费观看无限| 亚洲精品乱码久久久久蜜桃| 国产成人高清亚洲| 免费人成视频在线观看网站 | 久久久亚洲精品视频| 日本zzzzwww大片免费| 亚洲国产成人综合精品| 亚洲啪啪综合AV一区| 4399好看日本在线电影免费| 久久精品国产亚洲AV| 亚洲日韩乱码中文无码蜜桃臀网站| 亚洲第一网站免费视频| 性生大片视频免费观看一级| 老汉色老汉首页a亚洲| 韩国免费三片在线视频| 午夜网站在线观看免费完整高清观看| 亚洲免费观看网站| 精品国产亚洲男女在线线电影|