海上月明

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

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

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

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

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

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

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

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

          為此我總結了幾條關于命名的指導原則,希望這幾條原則能為你的命名設計帶來幫助,我使用的是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

          函數(方法和過程)


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

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

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

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

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

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

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

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

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

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

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



          主站蜘蛛池模板: 和田市| 布拖县| 分宜县| 洱源县| 浠水县| 灵川县| 石河子市| 合水县| 平湖市| 宜章县| 宜宾县| 北海市| 米林县| 海晏县| 清水县| 肃南| 和田市| 喀喇| 稻城县| 沂源县| 奈曼旗| 惠水县| 蓝山县| 娱乐| 丹棱县| 山东| 鹰潭市| 南郑县| 莲花县| 会宁县| 柘荣县| 稻城县| 金平| 双城市| 黄石市| 开平市| 绥江县| 房山区| 抚顺市| 龙游县| 马鞍山市|