2014-05-21 120 views
8

我一直覺得它非常有用,堅持在Java Beans命名約定:getX()setX()isX(),等等。我認爲Java Bean的命名約定提供了幾個主要優點:總是使用Java Beans命名約定是個好主意嗎?

  1. 通過代碼看時,你可以立即確定一種方法的目的。
  2. 查看API文檔時,由於Java文檔的字母順序,所有方法都分組在一起。
  3. 使用任何IDE的代碼完成功能時,通過簡單直觀的方式進行排序並找到要查找的方法。這又是由於IDE的字母順序。

我知道有很多類是不使用Java Beans命名約定的Java API的一部分。一個例子是ArrayList,其具有諸如size()的方法。

其實我有兩個主要問題:

  1. 它是一個好主意,總是嘗試使用Java組件的命名約定?如果不是,爲什麼?
  2. 我知道ArrayList是在Java Beans發佈之前編寫的。對於所有(或至少大多數)新內容,Oracle是否習慣使用Java Beans命名約定?

下面是更多的讓人們去思考,而不是一個實際的問題。

正如我上面所說的,我一直堅持使用Java Bean命名約定。我認爲他們在很多方面提供了很多優勢。我認爲最大的問題是,沒有Java組件,有很多人使用混亂的命名約定

個人認爲其後面應始終堅持,我很好奇,看看別人怎麼想這件事:

  1. 如果方法名稱是名詞,則該方法預計會返回一個值。
  2. 如果方法名稱是一個動詞,該方法應該總是做一些事情。如果該方法返回一個值,則返回的值應與執行的操作相關。
  3. 如果方法名稱是形容詞,則不應單獨使用該名稱。例如,big()應該是isBig()
  4. 不應該單獨使用不是對象的隱式屬性的名詞。
    例如:
    size()House對象的適當方法,但door()不是。這是因爲size是由本質決定的house的繼承屬性。 house的物理上不需要有door
    而不是door(),該方法應命名爲getDoor()
  5. 如果方法名稱符合多個詞性,該方法總是需要用戶端進行不必要的思考。因此,該方法可能應該重新命名。例如:
    比方說,我有一個方法叫做profile()。根據它屬於的類別,profile()可能是動詞或名詞。我可以分析一些東西,或者我可以獲取配置文件。將該方法的名稱更改爲getProfile()doProfiling()將增加澄清。
+0

我會說這會產生一定數量的個人意見。就我個人而言,我更喜歡使用bean命名約定,所以當我想嘗試「獲取」或「設置」一個值時,這些就是我開始搜索時使用的方法簽名。 Oracle/Sun是否習慣使用更新的API遵循這些約定,我不會說真的,這是一種羞恥 – MadProgrammer

+0

類有大寫的每個單詞(例如ArrayList)。 –

+3

偉大的問題,也基於觀點:/ 第一次我給了upvote和一個標誌... –

回答

0

如果你堅持可變因素和getter/setter方法之間的命名規則也允許您使用依賴於類似的BeanUtils和Spring這些公約的工具。雖然將名稱更改爲更易讀,但您可能會失去使用API​​來幫助解除「樣板」代碼的能力。

相關問題