“首先要給它一個名字,然后你才能描述它。”
@圖片:北京的晚霞?@攝影師:劉先生
這個話題源于公司《.NET技術規范》中的一條:
【強制】枚舉聲明應以Enum結尾
我對此并不認同:
首先,引用一下微軟官方文檔中,關于枚舉命名的建議:
??請勿在枚舉類型名稱中使用“Enum”后綴。?
??請勿在枚舉類型名稱中使用“Flag”或“Flags”后綴。?
??請勿在枚舉值名稱上使用前綴(例如,“ad”用于 ADO 枚舉,“rtf”用于富文本枚舉等)。
https://learn.microsoft.com/zh-cn/dotnet/standard/design-guidelines/names-of-classes-structs-and-interfaces
可見,微軟技術規范中,并不允許枚舉以Enum結尾。
微軟技術規范中,同樣也規定了某些命名需要有特定的結尾,如Attribute,Exception,Stream,對此小伙伴們是否也感到困惑,如何確定命名是否應以某個詞結尾?給代碼命名是程序開發中十分重要的工作之一,優秀的開發人員絕不會隨意用幾個字母去命名自己的代碼。
01
—
為什么枚舉類型不以Enum結尾
首先,在.NET中,枚舉和類、結構體是同一層級的概念,類和結構體都不以Class和Struct結尾,自然枚舉也不應該以Enum結尾。
另外,枚舉是一個包含特定數據的封閉數據集,供其他類調用,枚舉命名是否以Enum結尾都不影響對其含義的理解,加上后綴反倒顯得多余。
02
—
哪些類型應該有固定結尾
如果一個功能包含一組相關成員,成員職責明確,相互配合完成功能,那么不同成員應以其在整個功能中的作用,作為命名后綴,以使代碼結構清晰,易于理解。比如,領域驅動設計中,我們一般采用MediatR提供的事件式編程模型,其主要組成類包含命令和執行兩部分,因此將請求命名為xxxCommand,執行類命名為xxxHandler,代碼結構清晰。再比如,我們將Service作為業務邏輯處理類后綴,將Repository作為倉儲類的后綴,都是指示其所代表的特定功能。
03
—
總結
命名的基本原則是:“見名知意”。即命名能夠恰當的反映其含義,并保持簡潔。
我的思考是:
如果表示一個類型,則不需要固定后綴。
如果表示一個功能,則應該以某個特定詞做后綴。
代碼規范的意義在于,團隊中每個人都能很容易地閱讀其他人寫的代碼。在團隊開發中,遵循一致的代碼規范,能夠降低程序維護成本,提高代碼可用性,同時規范的制定應結合自己團隊的能力,認知及個性化需要。
借用馬丁.福勒的一句話:
任何人都可以編寫能被機器識別的代碼,?
優秀的程序員可以編寫人類理解的代碼。
喜歡的朋友可以點贊,轉發,關注