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

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

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

    海上月明

    editer by sun
    posts - 162, comments - 51, trackbacks - 0, articles - 8
       :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

    [轉]編程中的命名設計那點事

    Posted on 2009-06-13 22:50 pts 閱讀(312) 評論(0)  編輯  收藏 所屬分類: JavaOthersPHPPython

    From: 好的命名確是很重要,也是顯示設計思路是否清晰的重要指標

    在我開始設計系統(tǒng)的時候,我會花去很多時間去設計命名,因為好的命名和好的設計是分不開的。

    In the beginning was the Word, and the Word was with God, and the Word was God
    太初有道。道與神同在,道就是神。 (約翰福音第一章,第一節(jié))

    在設計過程中給類,方法和函數(shù)好的命名會帶來好的設計,雖然這不是一定成立,但是如果壞的命名那一定不會給你帶來好的設計。在設計過程,如果你發(fā)現(xiàn) 你很難命名某一個模塊,某個方法時,可能你真正遇到的問題不是難命名的問題,而是這個設計是否真的合理,你或許應該花更多的時間來重新設計一下你的模塊。【無語,我就經(jīng)常犯,功力不夠呀】

    好的命名不僅會帶來好的設計,好的命名還提高了程序的可讀性,降低代碼維護的成本。另一方面,如果糟糕的命名會給代碼帶來一堵無形的墻,讓你必須深入代碼去研究代碼具有的行為,增加你理解代碼的時間。

    為此我總結了幾條關于命名的指導原則,希望這幾條原則能為你的命名設計帶來幫助,我使用的是C++的語法,當然這些原則也很容易擴展到其他語言中去。

    類型命名(類,接口,和結構)


    名字應該盡量采用名詞
    Bad:           Happy
    Good:          Happiness

    不要使用類似名字空間的前綴
    Bad:           SystemOnlineMessage
    Good:          System::Online:Message

    形容詞不要用太多,能描述清楚就行
    Bad:           IAbstractFactoryPatternBase
    Good:          IFactory

    在類型中不要使用Manager 或則 Helper 或則其他沒意義的單詞
    如果你一定要在一個類型上加上Manager或Helper,那么這個類型要么就是命名的非常糟糕,要么就是設計的非常糟糕,如果是后則,那么這個類型就應該管理manage和幫助help一下自己了。
    Bad:           ConnectionManager
                   XmlHelper
    Good:          Connection
                   XmlDocument, XmlNode, etc.

    如果某個類不能通過簡單的命名來描述它具有的功能,可以考慮用類比的方式來命名
    Bad:           IncomingMessageQueue
                   CharacterArray
                   SpatialOrganizer
    Good:          Mailbox
                   String
                   Map

    如果你使用類比,你就應該一致的使用它們
    Bad:           Mailbox,DestinationID
    Good:          Mailbox,Address

    函數(shù)(方法和過程)


    簡潔
    Bad:           list.GetNumberOfItems()
    Good:          list.Count()

    不要太簡潔
    Bad:           list.Verify()
    Good:          list.ContainsNull()

    避免縮寫
    Bad:           list.Srt()
    Good:          list.Sort()

    對于完成某件事情的函數(shù)使用動詞
    Bad:           obj.RefCount();
    Good:          list.Clear();
                   list.Sort();
                   obj.AddReference();

    對于返回布爾型的函數(shù),使用類似提問的方式
    Bad:           list.Empty();
    Good:          list.IsEmpty();
                   list.Contains(item);

    對于只是返回屬性,而不改變狀態(tài)的函數(shù)則使用名詞
    Bad:           list.GetCount();
    Good:          list.Count();

    不要在函數(shù)名字中重復參數(shù)的名稱
    Bad:           list.AddItem(item);
                   handler.ReceiveMessage(msg);
    Good:          list.Add(item);
                   handler.Receive(msg);

    不要方法的名字中重復此方法的類的名稱
    Bad:           list.AddToList(item);
    Good:          list.Add(item);

    不要在函數(shù)的名字中加入返回類型,除非函數(shù)名必須以返回類型進行區(qū)別
    Bad:           list.GetCountInt();
    Good:          list.GetCount();
                   message.GetIntValue();
                   message.GetFloatValue();

    不要名字中使用And 或則 Or
    如果你使用一個連接詞來連接函數(shù)名,那么這個函數(shù)肯定是做了太多的事情,更好的做法是將其分成更小的函數(shù)來處理(類似面向?qū)ο笤O計準則中的責任單一原則)。
    如果你想確保是這是一個原子的操作,那么你應該用一個名字來描述這個操作或一個類來封裝他
    Bad:           mail.VerifyAddressAndSendStatus();
    Good:          mail.VerifyAddress();
                   mail.SendStatus();

    這是一篇非常優(yōu)秀的文章,我用我的語言在組織了一下,如果喜歡英文的讀者可以點擊這里閱讀原文



    主站蜘蛛池模板: 最近中文字幕大全中文字幕免费| 啦啦啦中文在线观看电视剧免费版 | 国产色在线|亚洲| 99热在线观看免费| 亚洲天堂免费在线| 亚洲人成无码网站久久99热国产| 一级毛片免费不卡在线| 亚洲gay片在线gv网站| 亚洲高清国产AV拍精品青青草原| 在线观看日本免费a∨视频| 日韩精品无码永久免费网站| 亚洲日韩区在线电影| 国产成人免费片在线视频观看| 国产日韩AV免费无码一区二区| 亚洲www在线观看| 亚洲中文字幕久久精品无码APP| av免费不卡国产观看| 久久精品无码免费不卡| 亚洲va久久久久| 国产成人精品日本亚洲| 蜜臀91精品国产免费观看| 无码少妇精品一区二区免费动态| 国产成人亚洲精品91专区高清| 色噜噜综合亚洲av中文无码| 亚洲精品乱码久久久久久蜜桃| 青青草a免费线观a| 在线观看片免费人成视频播放| 亚洲精品中文字幕| 亚洲福利电影一区二区?| 国产成人99久久亚洲综合精品| 天天操夜夜操免费视频| 一级毛片免费观看不卡的| japanese色国产在线看免费| 亚洲无人区码一二三码区别图片| 精品亚洲成AV人在线观看| 337p日本欧洲亚洲大胆裸体艺术| 好爽好紧好大的免费视频国产| 波多野结衣中文字幕免费视频| 国产精品99久久免费观看| 污视频网站免费在线观看| 亚洲第一综合天堂另类专|