Serve un percorso file nel livello della logica aziendale dal livello dell'interfaccia utente

0

Ecco cosa sto facendo:

Sto leggendo un file in BLL, che si trova nel livello dell'interfaccia utente. Attualmente l'applicazione utilizza HttpContext.Current.Request.PhysicalApplicationPath per trovare il percorso assoluto scritto in BLL. Ritengo che questo non sia un buon progetto e sto pensando che dovrei passare queste informazioni in qualche tipo di struttura a BLL o potrei usare un metodo di supporto per ottenerlo.

Per favore fammi sapere qual è il migliore e se ci sono soluzioni / suggerimenti migliori. Si prega di chiedere se avete bisogno di ulteriori dettagli.

    
posta paritosh 26.05.2012 - 17:33
fonte

1 risposta

1

Il solo fatto che la logica di business debba caricare un file dal percorso dell'applicazione fisica mi sembra un po 'ambiguo.

Ma se questo è davvero ciò di cui hai bisogno, estrarrai la conoscenza dei percorsi dei file in un componente separato.

public interface IFileLocations
{
    string FilePathWhereCriticalFilesAreFound { get; }
}

public class FileLocations
{
    public string FilePathWhereCriticalFilesAreFound
    {
         return HttpContext.Current.Request.PhysicalApplicationPath;
    }
}

Ora la tua logica aziendale ha bisogno solo di un riferimento a un'istanza IFileLocations, che potrebbe essere configurata in un contenitore DI (se ne usi uno).

Un design ancora migliore potrebbe essere quello in cui la classe restituisce un percorso di file, potrebbe aprire un file per te.

public interface IFileOperations
{
    Stream OpenCriticalSystemFile(string fileName);
}

Ciò rende la logica di business che dipende da questo file ancor più verificabile, poiché il codice che dipende dal file non apre effettivamente il file. Ciò consente di creare un file in memoria e di servire quel componente durante il test dell'unità.

    
risposta data 27.05.2012 - 00:00
fonte

Leggi altre domande sui tag