2012-01-19 53 views
0

我重構,有很多的嵌套調用,如重構,嵌套的方法調用

ServiceManagement.getGlobalizationService() 
        .createExportConfiguration(
          exportConfiguration, 
          getAdminWebClientSession().getUser().getToken() 
            .getTokenValue()); 

的程序我喜歡的一些意見,以什麼樣的重構將是適當的位置,以及最佳和最簡單的地方開始重構,現在我發現這是一個過於複雜和不清晰的塊。

+5

德米特法則和最低知識原則讓我們想起這裏。雖然[代碼評論](http://codereview.stackexchange.com)可能是一個更好的地方。 –

+0

@Anony Pegram我剛剛閱讀了關於該法的維基百科條目,這非常有幫助,謝謝。如果您或其他人想要提供答案作爲重構更好地遵守此法律的最佳方式,我會很樂意接受它。 – FooBar

回答

2

第一件事:你是否完全確定這些調用都不能(而且我的意思是EVER)返回null?如果你不完全確定那麼你應該這樣做:

GlobalizationService gs = ServiceManagement.getGlobalizationService(); 
if (gs!=null) { 
    .... 
} 

或者你可以捕獲NullPointerException。

如果你完全確定這是沒有必要再有就是對可讀性有用輕微的重構(refactorization):

TokenValue tv = getAdminWebClientSession().getUser().getToken().getTokenValue(); 
ServiceManagement.getGlobalizationService() 
       .createExportConfiguration(exportConfiguration,tv); 

你可能會考慮將迪米特法則直接從AdminClientSession得到TokenValue,但在一般情況下重構不一定有用。 Demeter法的另一種應用是將TokenValue或Token傳遞給代碼所在的方法,但這也不一定是個好主意。

+0

如果你想添加一些關於根據Demeter法進行未來重構的需求,我會很樂意接受這個答案 – FooBar