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

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

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

    潛魚在淵

    Concentrating on Architectures.

    posts - 77, comments - 309, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    對象傳遞和信息完整性

    Posted on 2005-12-05 17:56 非魚 閱讀(1090) 評論(3)  編輯  收藏 所屬分類: 面向對象設計
        很少有孤立存在的實體對象,它們之間總是會有所關聯。對象們因其職責而分離,又因其聯系而聚合。而我們在使用對象時,往往不需要把對象及其聚合的所有其他 對象一次性全部初始化,部分的對象聚合足以提供足夠的信息了。這時候,我們使用的對象的信息是不完整的。

        當具有不完整信息的對象被做為參數傳遞時,很可能導致我們對對象失去控制。部分對象的聚合在不同情景下的切換可能導致編程上的錯誤,而且對系統的維護帶來 負面的影響。由于對象職責的分割,對象本身無法理解這個問題,我們無法通過對對象本身進行處理(如增加職責)來消除這種不良影響。如何使用對象的部分信息 是由使用者根據情景要求決定的,編碼人員往往對使用情景沒有深刻的認識。在連續對應不同情景的處理鏈中,容易導致編碼錯誤。如下:

     1// Entity objects.
     2public class Obj {
     3  private ObjRef1 ref1;
     4  Private ObjRef2 ref2;
     5
     6  public Obj() {
     7  }
     8
     9  public Obj(ObjRef1 ref1) {
    10    this.ref1 = ref1;
    11  }
    12
    13  public Obj(ObjRef1 ref1, ObjRef2 ref2) {
    14    this.ref1 = ref1;
    15    this.ref2 = ref2;
    16  }
    17  // Accessors omitted.
    18} // ObjRef1, ObjRef2 omitted.
    19
    20// Process1
    21public class Prs1 {
    22  public Obj method1() {
    23    Obj obj = new Obj();
    24    obj.setObjRef1(loadObjRef1());
    25    // Do something to obj.
    26    return obj;
    27  }
         // Load method omitted.
         private ObjRef1 loadObjRef1() {
           // ......
         }
    28}
    29
    30// Process2
    31public class Prs2 {
    32  public void method2() {
    33    Obj obj = new Clt1().method1();
    34    // Do something to obj.ref2. Coding error may be found until debug phase.
    35  }
    36}

        在Process1.method1方法中持久化Obj,在Process2.method2中自行初始化Obj。這個方案面向對象并解決了一致性問題, 但增加性能成本。在Process1.method1中loadObjRef2,不夠面向對象,增加了維護成本。
       
        盡可能不使用這種鏈式的處理,代之以扁平的、可以總控Obj的方式:
       
     1public class Process {
     2  public void proceed() {
     3    // Need to change Prs1, Prs2's method signatures.
     4    Obj obj = 
     5    obj = new Prs1().method1(obj);
     6    obj.setObjRef2();
     7    obj = new Prs2().method2(obj);
     8    
     9    // Future processes can be inserted anywhere inside this method.
    10  }
    11}


        對于樹形結構或整體-部分結構,有一個統一的處理合理的,但內部的復雜性還是很高。

    評論

    # re: 對象的部分聚合問題  回復  更多評論   

    2005-12-06 10:06 by 小明
    樓主不會不知道Spring framework吧?

    Spring IOC能很好幫助你解決這個問題阿

    # re: 對象的部分聚合問題  回復  更多評論   

    2005-12-06 11:43 by 無言獨上西樓
    本質上說,IOC并沒有什么新鮮玩意,就是強化對接口編程。SPRING是提供了一個這樣的框架-裝配對象的框架,這樣,任何相同接口的對象就可以裝配在一起工作,類似于汽車裝配線。
    但顯然沒有明白LZ的意思。坦率地說,我也沒有明白LZ的意思。

    # re: 對象傳遞和信息完整性  回復  更多評論   

    2005-12-07 00:13 by 非魚
    前面描述的不好,給大家造成了理解上的麻煩。希望這次改過后表達足夠清楚。不行就再改吧。
    主站蜘蛛池模板: 亚洲色大成网站www久久九| 亚洲国产韩国一区二区| 亚洲AV无码AV男人的天堂不卡| 午夜福利不卡片在线播放免费| 久久亚洲国产精品| 日韩内射激情视频在线播放免费| 国产精品亚洲片在线| 国内永久免费crm系统z在线| 国产亚洲一区二区三区在线观看| 手机看片国产免费永久| 亚洲AV永久无码区成人网站| 久操视频免费观看| 久久亚洲国产精品成人AV秋霞| 啦啦啦完整版免费视频在线观看| 亚洲狠狠ady亚洲精品大秀| 久久精品免费全国观看国产| 亚洲一线产品二线产品| 免费看国产曰批40分钟| 大片免费观看92在线视频线视频 | 永久黄网站色视频免费| 亚洲第一街区偷拍街拍| 亚洲色偷偷狠狠综合网| 国产免费一区二区视频| 久久亚洲日韩看片无码| 小小影视日本动漫观看免费| 大片免费观看92在线视频线视频| 亚洲成色www久久网站夜月| 亚洲免费观看网站| 亚洲欧美成人av在线观看| 免费国产在线观看老王影院| 免费无码一区二区三区蜜桃| 亚洲明星合成图综合区在线| 日本特黄a级高清免费大片| 中文字幕免费观看全部电影| 亚洲国产成人精品青青草原| 国产成人免费福利网站| 最近中文字幕大全免费版在线| 亚洲制服丝袜一区二区三区| 亚洲?V无码成人精品区日韩| 一级毛片在线免费看| 色偷偷尼玛图亚洲综合|