2014-08-28 84 views
5

什麼是一些流行的方式來命名選項類型變量,爲了從他們的非選項的同行區分開來恢復選項類型的方法呢?通用命名約定

假設一個DAO目前有一個findById方法返回一個實體的實例或null,如果我們棄用那個方法並添加一個返回一個選項類型,我們應該如何命名它?

現在假設我們正在重構代碼,使用這種新方法,我們不希望更換與選項類型的實體變量的所有引用,我們應該如何命名選項類型變量?

interface Dao<ENTITY ,ID> { 
    @Deprecated 
    ENTITY findById(ID id); 

    //What naming convention should we use? 
    Optional<ENTITY> maybeFindById(ID id); 
} 

public class MyService { 
    PersonDao personDao; 

    public void changeAge(final Long id,final int age) { 

    //final Person person = personDao.findById(id); 
    //if(person !=null) 

    //What naming convention should we use? 
    final Optional<Person> maybePerson = personDao.maybeFindById(id); 

    if (maybePerson.isPresent()){ 
     final Person person = maybePerson.get(); 
     person.setAge(age); 
    } 
} 

回答

1

我認爲這實在是一個非常基於觀點的問題,因爲真的不可能有任何權威或正確的答案。

這就是說,我的偏好是僅舉返回Optional通常的方法,例如Optional<Foo> findById(Id id)。該方法與返回null意味着「無結果」的方法沒有什麼不同,只是返回類型使其更加明確。

至於一個Optional變量,我傾向於將它們命名爲optionalFoo ...但一般來說,我認爲如何命名局部變量(甚至字段)比命名方法的重要性要少得多。

6

如果不認爲這是具有此兩種不同的方法是一個好主意。如果對遷移有疑問,請保留舊遷移。

但有一種方法重構分兩步整個代碼:

首先,接口從

interface Dao<ENTITY ,ID> { 
    ENTITY findById(ID id); 
} 

interface Dao<ENTITY ,ID> { 
    default ENTITY findById(ID id) { return newFindById(id).orElse(null); } 
    Optional<ENTITY> newFindById(ID id); 
} 

我從你的問題假設適應變化接口的實現不是問題。現在告訴你的重構工具在線老,現在defaultfindById方法。

其次,newFindById重命名方法findById

這樣,您已經遷移了interface

interface Dao<ENTITY ,ID> { 
    Optional<ENTITY> findById(ID id); 
} 

而所有調用位置已經從:更改

Person maybePerson = personDao.findById(id); // may be null 

Person maybePerson = personDao.findById(id).orElse(null); 

這種方式你一個乾淨的012首先是,而另一個代碼適合於像以前一樣工作。然後,您可以逐個瀏覽呼叫站點,並決定是否以及如何更改。這可能需要一些時間,但由於interface已經乾淨並且命名約定問題解決了,所以不需要着急。

請注意,您的實例方法應該再而看起來像:

public void changeAge(final Long id,final int age) { 
    personDao.findById(id).ifPresent(person -> person.setAge(age)); 
} 

注意,在這兩種形式,重構的舊代碼與新代碼,就沒有必要來命名的類型Optional所以有一個變量不需要命名約定。

當然,重構需要支持Java 8的工具。

+0

「告訴你的重構工具內聯舊的,現在默認的findById方法」是不是通常以其他方式內聯? 「將方法的身體放入呼叫者的身體並移除該方法。」 – 2017-10-14 05:26:32