Responsabilità della classe di debug, accessibilità

0

Quindi sto scrivendo un Flocking System ( link ).

Ogni boa calcola i suoi vettori, mi piacerebbe disegnare questi vettori con una classe helper per scopi di debug.

Chi dovrebbe implementare la funzione DrawAllLines ?

Si noti che sto usando c #, quindi non ci sono funzionalità di amici come in C ++.

Si noti inoltre che DrawAllLines è molto più grande nella realtà, per questo vorrei spostare quel codice in un'altra classe.

Tentativo n. 1:

Boid

public class Boid
{
    private Vector3 cohesion;
    private Vector3 separation;
    private Vector3 aligment;

    public void DrawLines()
    {
        DrawLine(cohesion);
        DrawLine(separation);
        DrawLine(alignment);
    }
}

Debug

public class Debug{
    public DrawAllLines()
    {
        foreach(Boid b in allboids)
        {
            b.DrawLines()
        }
    }
}

Tentativo n. 2

Boid

public class Boid
{
    public Vector3 cohesion;
    public Vector3 separation;
    public Vector3 aligment;
}

Debug

public class Debug()
{
    public void DrawAllLines()
    {
            foreach(Boid b in allboids)
            {
                DrawLine(b.cohesion);
                DrawLine(b.separation);
                DrawLine(b.alignment);
            }
    }
}
    
posta Ferenc Dajka 12.06.2017 - 15:08
fonte

1 risposta

1

Ci sono diverse cose correlate che vogliamo mettere a parte,

  1. Nascondere informazioni
  2. Limitazione dell'accesso.
  3. Le responsabilità.

Nel nostro primo caso abbiamo il Boid che nasconde le sue informazioni tramite restrizione di accesso (rendendo questi campi privati), il che si traduce nel problema che ogni responsabilità che richiede quell'informazione deve essere assunta dalla classe stessa. Questo porta al codice che accoppia strettamente funzionalità e diventa difficile da testare, mantenere ed estendere.

Il nostro secondo tentativo rinuncia alla restrizione dell'accesso e all'occultamento delle informazioni per consentire a un'altra classe di assumersi la responsabilità di disegnare Boid .

In questo caso, direi che il secondo tentativo è migliore del primo, ma che ciò che renderebbe ancora migliore sarebbe rendere Boid immutabile o almeno avere tali proprietà di sola lettura.

Non esiste una formula semplice su cosa fare riguardo a questi tre aspetti del nostro design, ma possiamo formulare alcune semplici massime

  1. Non nascondere informazioni sul tuo dominio principale.
  2. nascondi le informazioni se sono pubbliche consentirebbe di compromettere il tuo design.
  3. Mantieni la restrizione dell'accesso semplice. Se ti accorgi che desideri utilizzare un modificatore di accesso amico / interno / a livello di pacchetto, è probabile che ci sia qualcosa di sbagliato nel progetto.
  4. L'occultamento delle informazioni consente a un oggetto di mantenere una chiara proprietà della sua responsabilità.
  5. Al contrario, la condivisione delle informazioni consente ad altri oggetti di assumere responsabilità.

Trovo che seguire queste regole semplifica le decisioni di progettazione in modo da promuovere un design pulito.

    
risposta data 12.06.2017 - 21:18
fonte

Leggi altre domande sui tag