Como posso usar o padrão “Non-Member Functions Improve Encapsulation” do C #?

5

Em 2000, Scott Meyers argumentou que as funções não associadas melhoram o encapsulamento. Em C ++, uma função não-membro é uma função global de estilo C:

link

Se você assinar sua teoria, como você implementaria isso em C #?

Se você não se inscrever em sua teoria, e quiser debater o assunto, por favor, faça-o fora deste post (sugiro-lhe: Sinta-se livre do comentário aqui com relação ao padrão atual: --- link .)

Esta questão é sobre como melhor implementar esse padrão em C #. Resposta aceitável descreve um conjunto de regras para usar esse padrão em C #

    
por zumalifeguard 13.02.2015 / 02:27
fonte

1 resposta

3

Use as seguintes regras:

  1. Para qualquer método não estático de uma classe que a) não acesse campos privados diretamente eb) chame apenas métodos públicos, mova o método para uma classe auxiliar estática e transforme-o em um método de extensão.

  2. Qualquer método estático público também pode ser movido para uma classe auxiliar.

Por convenção, um ajudante é uma nova classe estática com o mesmo nome da classe original, mas com a palavra Auxiliar anexada a ela.

Exemplo:

CÓDIGO ORIGINAL:

public class Foo
{
    int _intField;

    public void Method1()
    {
        doing something with _intField;
    }

    public void Method2()
    {
        Method1();
    }

    public static void Method3()
    {
        ....
    }

    private void Method4()
    {
        ....
    }

    public void Method5()
    {
        Method4();
    }
}

TRANSOFORMAÇÃO PROPOSTA:

public class Foo
{
    int _intField;

    public void Method1()
    {
        doing something with _intField;
    }

    private void Method4()
    {
        ....
    }

    public void Method5()
    {
        Method4();
    }
}

public static class FooHelper
{
    public static void Method2(this Foo foo)
    {
        foo.Method1();
    }

    public static void Method3()
    {
        ....
    }
}
  • O método 1 não pode ser movido porque está usando um campo particular
  • O método 2 pode ser movido porque não está usando um campo particular e está chamando um método público. Pode ser transformado em um método de extensão.
  • O método 3 pode ser movido porque é um método público estático
  • O método 4 não pode ser movido porque é um método privado
  • O método 5 não pode ser movido porque está chamando um método privado.
por 13.02.2015 / 02:27
fonte