Come posso utilizzare il pattern "Non membro migliora l'incapsulamento delle funzioni" da C #?

5

Nel 2000, Scott Meyers ha sostenuto che le funzioni non membri migliorano l'incapsulamento. In C ++, una funzione non membro è una funzione globale in stile C:

link

Se ti iscrivi alla sua teoria, come implementeresti questo in C #?

Se non ti iscrivi alla sua teoria e desideri discutere l'argomento, ti preghiamo di farlo al di fuori di questo post (Le suggerisco: Sentiti libero il commento qui riguardo al modello attuale: --- link .)

Questa domanda riguarda come implementare meglio quel modello in C #. La risposta accettabile descrive un insieme di regole per utilizzare questo modello da C #

    
posta zumalifeguard 13.02.2015 - 02:27
fonte

1 risposta

3

Utilizza le seguenti regole:

  1. Per qualsiasi metodo non statico di una classe a) che non accede direttamente ai campi privati eb) chiama solo metodi pubblici, sposta il metodo su una classe helper statica e lo trasforma in un metodo di estensione.

  2. Qualsiasi metodo statico pubblico può anche essere spostato in una classe helper.

Per convenzione, un helper è una nuova classe statica con lo stesso nome della classe originale ma con la parola Helper aggiunta ad essa.

Esempio:

CODICE ORIGINALE:

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();
    }
}

TRASFORMAZIONI PROPOSTE:

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()
    {
        ....
    }
}
  • Il metodo 1 non può essere spostato perché sta utilizzando un campo privato
  • Il metodo 2 può spostarsi perché non sta utilizzando un campo privato e sta chiamando un metodo pubblico. Può essere trasformato in un metodo di estensione.
  • Il metodo 3 può essere spostato perché è un metodo pubblico statico
  • Il metodo 4 non può essere spostato perché è un metodo privato
  • Il metodo 5 non può essere spostato perché chiama un metodo privato.
risposta data 13.02.2015 - 02:27
fonte

Leggi altre domande sui tag