2012-01-19 2 views
0

Я рефакторинг программы, которая имеет много вложенных вызовы, такие какРефакторинга, вложенный метод вызывает

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

Я хотел бы несколько советов относительно того, какого рода рефакторинга был бы уместно здесь, а также лучшим и самое простое место для начала рефакторинга, прямо сейчас я считаю, что это слишком сложный и неясный блок.

+5

Признается закон Деметры и принцип наименьшего знания. Хотя [Code Review] (http://codereview.stackexchange.com) может быть лучшим местом для этого. –

+0

@ Энтони Пеграм Я только что прочитал запись в Википедии по этому закону, и это было очень полезно, спасибо. Если вы или кто-то еще захотите дать ответ как лучший способ рефакторировать в целях более полного соблюдения этого закона, я бы с радостью принял его. – FooBar

ответ

2

Первое: вы полностью уверены, что ни один из этих вызовов не может (и я имею в виду EVER) вернуть null? Если вы не полностью уверены, то вы должны делать:

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

Или вы могли бы поймать NullPointerException.

Если вы полностью уверены, что не является необходимым, то есть полезная небольшая refactorization для читаемости:

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

Вы могли бы рассмотреть вопрос о применении закона Деметры получить TokenValue непосредственно из AdminClientSession, но в в общем случае, что рефакторизация не всегда полезна. Альтернативное применение Закона Деметры означало бы, что TokenValue или Token передаются методу, в котором этот код лежит, но опять же это не обязательно хорошая идея.

+0

Если вы хотите добавить что-то о необходимости будущего рефакторинга в соответствии с Законом Деметры, я с радостью принимаю это как ответ – FooBar

Смежные вопросы