2010-01-12 4 views
-1

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

private void CreateProxy() 
    { 
     //extract the following guard statement. 
     Host selected = this.comboBox1.SelectedItem as Host; 
     if (selected == null) 
     { 
      return; 
     } 


     this.SearchProxy = ServiceProxy.ProxyFactory.CreateSearchProxy(GetSelectedIP().ToString()); 
     this.StreamProxy = ServiceProxy.ProxyFactory.CreatePlayerProxy(GetSelectedIP().ToString()); 
    } 

    //extracted guard method 
    public bool IsHostSelected() 
    { 
     Host selected = this.comboBox1.SelectedItem as Host; 
     if (selected == null) 
     { 
      return false; 
     } 
     return true; 
    } 

см? теперь я должен добавить возвращаемое значение для извлеченного метода, является ли это своего рода уродливым?

любое лучшее решение, чтобы избежать добавления возвращаемого значения для извлеченного метода?

+0

Что вы пытаетесь сделать? –

+0

так в чем вопрос? –

+0

-1: Пожалуйста, уточните вопрос. –

ответ

1

Я не вижу большой сделки. Во-первых, я хотел бы переписать как:

static bool SelectedItemIsHost(ComboBox box) { 
    return box.SelectedItem is Host; 
} 

Обратите внимание на переименовании, в ComboBox в качестве параметра, и изменение тела.

Теперь это делает ваш код читать далее ясно:

void CreateProxy() { 
    if(SelectedItemIsHost(this.comboBox1)) { 
     this.SearchProxy = ServiceProxy.ProxyFactory.CreateSearchProxy(GetSelectedIP().ToString()); 
     this.StreamProxy = ServiceProxy.ProxyFactory.CreatePlayerProxy(GetSelectedIP().ToString()); 
    } 
} 

Так что теперь он читает «если выбранный элемент является Host то делать такие вещи.»

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

+0

да. Я знаю о связи. – Benny

1

любое лучшее решение, чтобы избежать добавления возвращаемого значения для извлеченного метода?

Да:

//extracted guard method 
public bool IsHostSelected() 
{ 
    Host selected = this.comboBox1.SelectedItem as Host; 
    return selected != null; 
} 
+0

моя точка не возвращает true/false. я должен добавить возвращаемое значение к извлеченному методу. может быть, это совсем неважно. – Benny