iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 5
1
Software Development

邁向專業軟體工程師必修的英文課系列 第 5

Day 5 -[名詞四] 類別的命名原則

  • 分享至 

  • xImage
  •  

目前市面上大多知名的程式語言大多都是物件導向程式語言,什麼是物件導向程式語言?簡單說就是無論寫的東西是什麼,都必需依存在一個"類別",然後再用這個"類別"產生一個"物件",而這個物件可以操作,有生命週期,可以被延展也可以被限制。

類別(class)

當在設計一個類別的時候,都是以"一種東西"的概念去設計,命名時我們要先回答以下問題:

  • 這個類別設計出來,是要解決什麼問題嗎?
  • 其他的開發人員,可以看到這個名稱,就知道他是做什麼,或者解決什麼問題的嗎?
  • 這個名字會讓人造成困擾嗎?

類別的名稱通常應該是一個集合名詞,而且是單數或不可數名詞,例如,在描述使用者時,會寫:

public class User
{
    private int _userId;
    public string UserName { get; set;}
    public void Attack(){ return; }
}
User warrior = new User();
User magician = new User();

有時候也會用組合字或者名詞片語來描述一個類別,例如"ObjectParser", "ConnectionManager", "AllocateService"。

在為class命名的的時候,雖然原則還是希望他是用比較普遍的命名,不會讓這個類別直接和物件名稱相同:原因是希望這個類別能保留重用的可能性。簡單說就是你要讓一個類別縮小描述的範圍比較簡單(例如用動物來描述貓,狗或其他任何動物),但要讓一個小範圍的類別擴大描述範圍比較困難(例如用大富翁的類別就沒辦法描述麻將,即使他們都是table game)。從上面的例子也可以看出來,類別的命名也應該要適當,太過於General可能會讓整個類別太大變成Large Class的code smell。

https://refactoring.guru/images/refactoring/content/smells/large-class-01-3x.png
為了讓類別便於管理,會有幾個方法來管理:

  1. 用目錄分類,或者用namespace,package等方法來分類
    把類別放在專屬的空間下,標示他是屬於這個用途的類別,例如:
    MyProject.DAO.User // 這是DAO用的User類別
    MyProject.Test.User //這是測試用的User類別
  2. 用suffix來標示這個類別
    第一個方法很直覺,但是如果在交互使用的時候一樣會發生困擾,因此會在類別加上後綴,以標示這個類別的用途,例如
    MyProject.DAO.UserDAO
    MyProject.Test.UserTestCase

所以,類別命名要注意什麼呢?
1.它必需是一個單數名詞,而且不會直接特指某個物件。
2.它能讓人一眼就看出他的用途,同一個團隊的人應該可以馬上理解他的用途及要解決的問題
3.它能被方便的搜尋及管理

類別命名應該是相對比較單純的,但在前端開發時可能比較沒那麼容易,有遇過什麼很奇怪的問題可以分享嗎?留言讓大家知道吧!


上一篇
Day 4 -[名詞三] TL;DR 談縮寫字(Abbreviation)及首字母縮寫(Acronym)
下一篇
Day 6 -[名詞五]Enumerated type,列舉形態
系列文
邁向專業軟體工程師必修的英文課30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言