Classes Parciais e o Princípio da Responsabilidade Única (SRP)

Classes parciais foram introduzidas no .NET Framework há 10 anos atrás. Este recurso é interessante como ajuda a separar o código da interface do usuário do código da lógica de negócio em dois ou mais arquivos fonte. Por exemplo, em uma aplicação Windows Forms há o arquivo designer.cs, no qual os componentes são declarados e suas propriedades, setadas; enquanto o outro arquivo form.cs é escrito pelo desenvolvedor sem misturar código de UI com regras de negócio.

As classes parciais têm como objetivo melhorar a organização do código, de fato, mas uma outra razão para utilizá-las é ajudar a manutenção em classes razoavelmente grandes. Entretanto, é importante salientar que, para manter um bom design de classe, devemos recorrer ao que Robert Martin aponta com o Princípio da Responsabilidade Única (SRP): uma classe deve ter uma única responsabilidade. Por mais que haja vários arquivos fonte referenciando uma só classe, temos que preocupar em não fugir do contexto. Ou seja, deve-se ter parcimônia em aproveitar o recurso, pois conforme o projeto for crescendo, a desorganização pode tornar a manutenção insustentável. Separação de responsabilidades é essencial.

Então, como funciona? Você pode criar vários arquivos .cs e nomeá-los da maneira que quiser – mas a declaração das classes deve ter o mesmo nome precedido do modificador partial, como no exemplo abaixo:

//Report1.cs
partial class Report
{
     public void PrintReport()
     {
        ...
        PrintLog();
     }
}
//Report2.cs
partial class Report
{
     bool status;

     private void PrintLog()
     {
        if (status == Convert.ToBoolean(PrintStatus.OK))
        {
           ...
        }
     }

    public enum PrintStatus
    {
      OK,
      ERROR
    }
}

No arquivo Report1.cs foi definido um método encarregado de imprimir um relatório, enquanto no arquivo Report2.cs  o método PrintLog() imprime o log da impressão do documento.

O compilador irá combinar em um único arquivo todos os arquivos definidos como partial class, e o código em linguagem intermediária gerado não sofre alteração. Não apenas classes podem ser definidos por esse modificador, mas também structs, interfaces ou métodos.

Como características importantes:

  • Todas as “partes” têm de estar presentes na mesma solution (senão teremos um erro de compilação);
  • Não é possível usar o modificador private na declaração de um tipo parcial;
  • Os atributos e métodos são acessíveis por ambas as partes;
  • Se alguma parte de uma classe parcial for abstrata, toda a classe será abstrata;
  • Uma parte pode implementar uma ou mais interfaces e, outra parte, outra(s) interface(s); ao final a classe como um todo implementa todas as interfaces.

 

Referências

IL – Intermediate Code Generation (.Net)

Partial Classes

 

Até a próxima,

Thiago

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s