WCF Exception jogando e manipulando o caminho OOP

Ok, então eu fiz outra pergunta sobre o mesmo tópicoAqu e, embora eu não tenha recebido uma resposta direta, juntei algum código em que trabalhei para fazer o que queria. A questão é: dessa maneira, quebra algum princípio de OOP?

O que eu queri

se o OOP adequado para declarar os tipos de falha em um serviçTem um bloco de captura no lado do cliente que pode lidar com vários tipos de exceções geradas pelo serviço Tenha um método HandleException por classe de falha que tenha sua própria implementação No lado do cliente, há apenas um bloco de exceção, entenda qual exceção foi lançada e chame o respectivo método HandleException da classe de falha correspondente

Como eu consegui funcionar

Declarou um contrato de falha no servidor para cada tipo de exceção que herda de um tipo de exceção base

[DataContract]
public class BusinessRuleViolationFault : BaseFault
{
  public BusinessRuleViolationFault(string message)
  : base(message)
        {

        }
}
[DataContract]
public class SomeOtherViolationFault : BaseFault
{
    public SomeOtherViolationFault(string message)
        : base(message)
    {

    }
}

[DataContract]

classe pública abstrata BaseFault

{

public BaseFault(string message)
{
  Message = message;
} 

}

No lado do cliente, criei classes parciais dos mesmos tipos de falha acima e implementei o método de exceção de manipulação. Eu tive que fazer isso no lado do cliente, pois se eu criasse esse método no lado do serviço, ele não seria serializado e estaria disponível via proxy.

public partial class BusinessRuleViolationFault : BaseFault
{

    public override void HandleException()
    {
        MessageBox.Show("BusinessRuleViolationFault handled");
    }
}



public partial class SomeOtherViolationFault : BaseFault
{

    public override void    HandleException()
    {
        MessageBox.Show("SomeOtherViolationFault handled");
    }
}


public abstract partial class BaseFault
{
    public abstract void HandleException();
}

Em seguida, criei um método de extensão na classe faultexception, de acordo com o código cristão, que marquei como resposta aceita no meu post anterior. Isso basicamente usou a reflexão para me dar o nome da classe de exceção de falha lançad

Em seguida, no bloco de captura do cliente, usei esse nome para criar uma instância da classe parcial criada localmente que possui o método de exceção de manipulaçã

O que estou curioso para saber é: quebrei algum princípio de POO aqui? Isso é OOP?

Eu não quero várias instruções if else neste bloco catch ou tenho vários blocos catch. Qual é a sua opinião sobre o tradeoff de usar um bloco catch para obter desempenho e perdê-lo com a reflexão, tentando descobrir qual método de classe chamar?

Obrigado pelo seu tempo e paciência ..

questionAnswers(1)

yourAnswerToTheQuestion