<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    代碼檢查(6)

    Posted on 2008-10-29 22:20 非魚 閱讀(3051) 評論(0)  編輯  收藏 所屬分類: 面向對象設計Java技術
    6. 使用具體的類定義變量

    使用具體的類來定義變量,可能導致代碼中存在抽象問題。這里所說的變量包括靜態變量、實例變量、本地變量、方法的參數和返回值。

    更加具體一點說,在組織內部的代碼中,如果存在一個類繼承關系,并且這個類繼承關系中的具體類被用來定義變量,則這里有問題的可能性比較高。我們定義抽象類或接口的目的就是抽象使其脫離易變的實現細節,如果抽象了穩定的接口而不在變量定義中使用它,那還有什么意義呢?

    使用具體類定義變量的問題就在于,這通常綁定了實現類而缺乏抽象,難以適應未來需求的發展,難以維護而增加成本。

    相對來說,使用具體類定義本地變量的影響是最小的,在可以控制的范圍之內;使用具體類定義實例變量和靜態變量,如果變量是private的,基本也在可控的范圍內。

    如果實例變量和靜態變量package、protected或public的,需要特別的當心。這時候實際上已經向外界(當前類之外)隱含的“發布”了這些變量,它們可能已經不在你的控制范圍之內了。由于封裝的不嚴密并且直接泄漏了具體的、不穩定的實現,極易導致代碼在維護過程中的失控,并且給測試帶來了困難。如果沒有特別的理由,這樣的代碼是一定要修正的。修改變量的可見性是最好的方式,這要求對變量的使用情況進行檢查(現代的IDE一般都支持Find Usage),如果這些變量已經被類外部的代碼使用了,修改的工作量會大大增加,同時修改可見性也需要對最初的設計進行重新評估;這樣把具體類修改成抽象類或者接口就成為了退而求其次的解決方案。如果時間允許,二者同時進行是最好的,長遠來看也是最低成本的。

    使用具體類定義方法的參數和返回值也不好,這樣做的危險程度是中等的。這使對象之間的通信契約建立在了相對具體的層次上,缺乏抽象而難以適應變化,自然也帶來了維護成本的增加。但契約的修改比直接對“隱私”的侵犯稍好一點,并不會帶來對內部實現的大規模、不可控的破壞。當然,如果在代碼檢查中發現了這樣的問題,也要盡可能修改。

    在代碼檢查工具的實現上,對具體類定義本地變量、實例變量、靜態變量、方法參數和返回值的檢查可能是分離的。這樣我們也有機會對檢查的詳細程度進行定制。我個人的觀點是,除本地變量之外的情況是一定要檢查的。

    對于第三方產品來說,也應該盡量使用抽象類和接口來定義變量。不然你就把自己放在了一個比較危險的境地了。而且,部分代碼檢查工具,可能并不會檢查這樣的情況。

    , , , ,

    主站蜘蛛池模板: 毛片免费vip会员在线看| 日本免费人成网ww555在线| 好先生在线观看免费播放| 亚洲国产精品热久久| 久久精品成人免费看| 亚洲阿v天堂在线| 日韩免费在线视频| 激情内射亚洲一区二区三区| 无码国产精品一区二区免费vr | 亚洲欧美成人av在线观看| 99精品全国免费观看视频| 亚洲最大av资源站无码av网址| 久久久久久精品成人免费图片| 亚洲黄色片在线观看| 欧洲乱码伦视频免费| 亚洲熟女乱色一区二区三区| 妞干网在线免费视频| 美女被免费视频网站a| 亚洲综合无码AV一区二区| 国产麻豆成人传媒免费观看 | 国产成人A亚洲精V品无码| 巨胸喷奶水www永久免费| 久久精品国产亚洲av麻| 57pao一国产成视频永久免费| 亚洲一卡2卡3卡4卡国产网站| 国内外成人免费视频| 一本到卡二卡三卡免费高| 亚洲精品无码高潮喷水在线| 中文字幕天天躁日日躁狠狠躁免费| 91午夜精品亚洲一区二区三区| 破了亲妺妺的处免费视频国产| 日本高清免费中文在线看| 亚洲AV永久无码区成人网站| 巨波霸乳在线永久免费视频| 亚洲AV成人无码网站| 亚洲精品无码av人在线观看| 99国产精品永久免费视频 | 人人狠狠综合久久亚洲88| 免费在线观看视频网站| 白白色免费在线视频| 久久99国产亚洲精品观看|