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

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

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

    Vincent

    Vicent's blog
    隨筆 - 74, 文章 - 0, 評論 - 5, 引用 - 0
    數據加載中……

    對象傳遞和信息完整性

    ??? 很少有孤立存在的實體對象,它們之間總是會有所關聯。對象們因其職責而分離,又因其聯系而聚合。而我們在使用對象時,往往不需要把對象及其聚合的所有其他對象一次性全部初始化,部分的對象聚合足以提供足夠的信息了。這時候,我們使用的對象的信息是不完整的。

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

    ?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}


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

    posted on 2006-08-24 15:44 Binary 閱讀(280) 評論(0)  編輯  收藏 所屬分類: OOA/OOD


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产精品亚洲天堂| 亚洲免费人成视频观看| 国产天堂亚洲精品| 免费va人成视频网站全| 国产亚洲精品欧洲在线观看| 国产成人免费片在线观看| 美女隐私免费视频看| 亚洲一区二区视频在线观看| 三年片免费高清版| 亚洲国产精品人久久| 99国产精品永久免费视频| 亚洲精品天堂成人片AV在线播放 | va亚洲va日韩不卡在线观看| a毛片免费播放全部完整| 亚洲国产精品一区二区久久hs | 男女做羞羞的事视频免费观看无遮挡| 亚洲码一区二区三区| 好吊妞在线成人免费| 日韩电影免费在线观看网址| 337p日本欧洲亚洲大胆裸体艺术| 国产精品区免费视频| 亚洲免费一级视频| 免费真实播放国产乱子伦| 黄色短视频免费看| 亚洲黄色在线观看视频| 免费视频淫片aa毛片| 一级毛片成人免费看a| 久久精品国产亚洲AV无码偷窥| 国色精品卡一卡2卡3卡4卡免费 | 国产午夜亚洲精品不卡| 久久久久久A亚洲欧洲AV冫| 亚洲视频在线免费观看| 亚洲色偷偷综合亚洲av78| 国产亚洲精品成人AA片新蒲金| 1000部啪啪未满十八勿入免费| jizzjizz亚洲日本少妇| 国产精品国产亚洲精品看不卡| 啦啦啦手机完整免费高清观看| 久久一区二区免费播放| 亚洲人成77777在线播放网站不卡| 亚洲精品视频免费观看|