2010-10-01 142 views
1

如果某個方法將類/結構作爲輸入參數,那麼命名它的最好方法是什麼?方法命名約定

class Person{} 
class Address{} 

class Utility{ 
    //name **style 1** - use method overloading 
    public void Save(Person p){} 
    public void Save(Address a){} 

    *//name **style 2** - use unique names that define what they are doing 
    //or public void SavePerson(Person p){} 
    //and public void SaveAddress(Address a){}* 
} 

我個人比較喜歡的風格1(使用語言功能 - 在這種情況下,超載)。 如果你喜歡風格1,你能指出我的任何「官方」文檔,說這是一個標準?

+0

去風格1與方法重載 – Vijjendra 2010-10-01 21:22:15

+0

馬特 - 任何面向對象的語言我猜。 – 2010-10-02 21:53:30

+0

我認爲Oded和Fredrik Mork的評論都是有效的答案 – 2010-10-07 15:12:15

回答

3

我會說你的挑戰不是在方法命名領域,而是類型設計。一個類型負責保存Person對象和Address對象似乎是一種類型與more than one responsibility。這種類型往往會發展壯大,並最終難以維持。如果您改爲創建更多專用類型,方法命名可能會自動變成更簡單的任務。

如果你仍然想收集這些方法在同一類型,它主要是一個風格的問題。可能想到的一件事是,這種類型是否可能被用另一種語言編寫的代碼消耗,並且不支持方法重載。在這種情況下,更長的名字是要走的路。否則,只要堅持什麼感覺最好(或任何在你的工作場所的統治公約)。

+0

Fredrik,我想到的情景是當你有商業實體不知道他們是如何水合或持續的。相反,DAL是負責保持和維持實體(從web服務或數據庫或本地文件系統)負責的人員。這種情況下的DAL將具有保存方法。 – 2010-10-02 21:57:20

+0

Fredrik,另一個類可能以這種方法結束的場景是業務實體和數據傳輸對象(例如從Web服務到商業實體的對象,反之亦然)之間的轉換。 – 2010-10-02 21:59:42

+1

@Rajah:在這種情況下我通常會做的是我有不同類型的對象(例如'PersonRespository','AddressRepository',...)的存儲庫類。這樣的存儲庫可以包含爲每種類型的對象提取和存儲數據的必要方法。這意味着(除其他外)如果您需要將存儲代碼更改爲其他類型,則負責一種類型對象的類型保持不變;可能更健壯的代碼以及更小的存儲庫單元。 – 2010-10-02 22:09:49

2

這是一個風格問題。

如果你不喜歡長的方法名,去與1

如果你不喜歡長時間超負荷名單,請與2

最重要的一點是保持一致的,所以做不要在一個項目中混合兩種風格。

如果你看到你有很多這樣的方法,你可能需要重新考慮你的設計 - 也許涉及繼承的解決方案會更合適。

0

不同名稱完全避免了與方法重載相關的任何問題。例如:

  • 如果參數的類型匹配多個候選項,則可避免歧義。
  • 在C++中,重載的方法可以隱藏超類中的相同名稱。
  • 在Java中,類型擦除防止僅通過類型參數化區分的重載方法不同。

也值得問一問,是否可以使用多態性而不是重載。