Il mio primo ri-factoring SOLID

2

Sto provando a utilizzare i principi SOLID per la prima volta. Sto rivisitando una classe File che memorizza le informazioni sui file e rende disponibili le operazioni sui file. Questa classe viene quindi ereditata da tipi di file specifici per rendere disponibili i metodi per quel tipo.

Ho iniziato con SRP e ho provato a creare una classe astratta FileWriter e FileReader per leggere e scrivere da risorse diverse. Alcuni includono:

  • File System
  • Streams
  • database
  • Altri servizi non definiti ( SOAP , REST ??).

Sono felice di dire che i dati del file sono gestiti da un array di byte, ma non sono sicuro di come gestire il percorso del file / uid per una risorsa.

Ecco cosa ho ...

public abstract class EFileReader
{
    event EventHandler<IEFileEventArgs> ReadThreadedComplete;
    public abstract byte[] Read(object source);
    public abstract async Task<byte[]> ReadAsync(object source);
    public abstract void ReadThreaded(object source);
    protected virtual void OnFileRead(IEFileEventArgs e)
    {
        EventHandler<IEFileEventArgs> handler = this.ReadThreadedComplete;
        if (handler != null)
        {
            handler(this, e);
        }
    }
}

Potrei trasmettere l'oggetto come tipo richiesto nell'implementazione. In alternativa potrebbe essere un tipo generico in qualche modo specificato nell'implementazione (non so come).

public abstract class EFileReader<T>
{
    event EventHandler<IEFileEventArgs> ReadThreadedComplete;
    public abstract byte[] Read(T source);
    public abstract async Task<byte[]> ReadAsync(T source);
    public abstract void ReadThreaded(T source);
    protected virtual void OnFileRead(IEFileEventArgs e)
    {
        EventHandler<IEFileEventArgs> handler = this.ReadThreadedComplete;
        if (handler != null)
        {
            handler(this, e);
        }
    }
}

... O forse c'è qualche astrazione della fonte che posso scrivere per accogliere i vari possibili casi d'uso. Immagino che potrei farcela prendere una classe FileResource astratta che espone uno stream.

Qual è il modo migliore per avvicinarsi a questo?

    
posta Ablue 03.11.2014 - 23:56
fonte

1 risposta

3

L'intero scopo della creazione di System.IO.Stream nel framework, doveva essere in grado di gestire i dati da diversi tipi di fonti.

Devi solo impostare il tuo parametro source su un tipo Stream .

Inoltre, tu dici che la tua classe tratta i dati da fonti diverse (inclusi i flussi). Questo in effetti non lo rende più una classe File , non è vero?

    
risposta data 04.11.2014 - 09:55
fonte

Leggi altre domande sui tag