Рефакторинг для использования фабрики channelfactory


Я использую VS 2008 и .Net 3.5 с

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

какие-либо предложения ?

ServiceDependencias.IDependencias svcDependencias = null;

public void Dependencias(List<MfaFicheroForm> listaFicherosFormXML, string entorno)
{
    CustomChannelFactory<ServiceDependencias.IDependencias> customChannelFactory = null;

    if (!string.IsNullOrEmpty(FicheroConfiguracionWCFService)
        && !string.IsNullOrEmpty(EndpointNameWCFService))
    {
        if (!File.Exists(FicheroConfiguracionWCFService)) 
            throw new FileNotFoundException("Fichero de configuración WCF no encontrado", FicheroConfiguracionWCFService);

        customChannelFactory = new CustomChannelFactory<ServiceDependencias.IDependencias>(EndpointNameWCFService, FicheroConfiguracionWCFService);

        var iDependencias = customChannelFactory.CreateChannel();          
        svcDependencias = iDependencias;
    }

    if (svcDependencias == null)
    {
        var depClient = new DependenciasClient();
        svcDependencias = depClient;
    }

    GenerarDependenciasDeFormulariosFmb(listaFicherosFormXML, entorno);

    if (svcDependencias is DependenciasClient)
    {
        ((DependenciasClient)svcDependencias).Close();
        return;
    }

    customChannelFactory.Close();
}


617
2
задан 13 апреля 2011 в 09:04 Источник Поделиться
Комментарии
1 ответ

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


  • Зачем вы создаете временную переменную, которая используется только для установки другой переменной на следующей строке, а не только устанавливать его напрямую? (iDependencias & depClient).

  • Вы закрываете канал, если это DependenciasClient но не понятно ссылка на него. svcDependencias видна снаружи этот метод и содержать ссылку на закрытое соединение может быть проблема.

  • Вы не проверить, если svcDependencias уже установлен, перед установкой его в новое соединение. Я не знаю, если вы можете повторно использовать соединение, но вы должны как минимум закрыть существующее соединение, прежде чем вы потеряете ссылку на нее.

  • Я заметил, что вы только закрыть фабрику каналов, если канал не DependanciasClient. Хотя это, вероятно, будет работать нормально, если канал фабрика не возвращает DependanciasClient, я думаю, что проверку на null будет более четкое решение.

    if(customChanelFactory != null)
    {
    customChanelFactory.Close();
    }

  • Вместо того, чтобы использовать 'в' оператор последовал бросок, вы должны использовать 'в' оператор и проверить на null.

    DependenciasClient client = svcDependencias as DependenciasClient;

    if (client != null)
    {
    client.Close();
    }


  • Если svcDependencias существует только на уровне класса, на благо GenerarDependenciasDeFormulariosfmb, то лично я предпочел бы передать его в качестве аргумента, а затем использовать поле класса.

2
ответ дан 16 апреля 2011 в 06:04 Источник Поделиться