Come memorizzare / gestire i dati disponibili per altre classi

3

Sto scrivendo un programma CAD. Diciamo che ho in input class, questa classe legge vari dati da un file di testo e crea un sacco di liste / dizionari e .... Questi dati devono essere accessibili con altri metodi in altre classi da modificare. Ora ecco come l'ho fatto finora:

Ho una classe statica: Building.cs Quando creo o carico un progetto questa classe contiene tutti i dati come l'elenco di colonne, raggi, punti, ecc. Tutti questi sono memorizzati come campi privati. Posso accedervi usando i metodi pubblici della classe come GetColumns o GetPoints ...

Ora ho anche classi non statiche. Contengono 2-3 metodi pubblici. e fare alcune cose su varie parti dell'edificio.

public static class Building
{
    private static List<Column> columns;
    private static List<Beams> beams;
    private static List<Points> points;

    public static List<Column> GetColumns() 
    {
        return Columns;
    }
}

public class ColumnsService()
{
    private List<Columns> columns;
    public GroupColumns(List<Columns> columns)
    {
        this.columns = columns;
    }

    public void Group()
    {
        // group columns
    }
}

var columns = Building.GetColumns();
var columnsService = new ColumnsService(columns);
columnsService.Group();

Mi stavo chiedendo è questa la strada da percorrere? In quale altro modo posso memorizzare i dati. I dati devono essere accessibili per tutta la durata del programma alla maggior parte delle classi.

    
posta Vahid 19.12.2014 - 16:00
fonte

1 risposta

4

Perché nella tua prima domanda hai professato una mancanza di conoscenza sull'iniezione di dipendenza, lo spiegherò in termini semplici:

public class ThingThatNeedsABuilding
{
  private Building building;
  public ThingThatNeedsABuilding(Building building)
  {
    this.building = building;
  }
}

public class OtherThingThatNeedsABuilding
{
  private Building building;
  public OtherThingThatNeedsABuilding(Building building)
  {
    this.building = building;
  }
}

public class Application
{
  public static void Main(string[] args)
  {
    var building = new Building();
    var thing1 = new ThingThatNeedsABuilding(building);
    var thing2 = new OtherThingThatNeedsABuilding(building);
  }
}

È davvero così semplice. La stessa istanza di costruzione è ora condivisa tra queste due istanze e nient'altro . Questo è importante. Non vuoi più roba del necessario per essere disponibile. Questo ti aiuta ad evitarlo.

Se un oggetto ha bisogno di qualcosa, significa assolutamente dargli qualcosa. Rendendola globalmente accessibile a tutti gli oggetti rende difficile stabilire se il programma verrà eseguito, perché un problema nella configurazione della dipendenza potrebbe causare un arresto anomalo, ma non è possibile dire all'avvio che un oggetto ha quella dipendenza.

Ci sono altri motivi importanti per iniettare le dipendenze, ma quella è molto semplice da capire e molto difficile da rifiutare.

    
risposta data 19.12.2014 - 18:19
fonte

Leggi altre domande sui tag