C # preoccupazione per l'ambito del servizio

1

Sto usando l'iniezione di dipendenza su un progetto per iniettare servizi usando Injection dependency injection

private async Task<T> GetResult<T>(HttpResponseMessage response)
    {
        if (typeof(T) == typeof(byte[]))
        {
            return await(response.Content.ReadAsByteArrayAsync() as Task<T>);
        }
        else if (typeof(T) == typeof(System.IO.Stream))
        {
            return await(response.Content.ReadAsStreamAsync() as Task<T>);
        }
        else if (typeof(T) == typeof(string))
        {
            return await(response.Content.ReadAsStringAsync() as Task<T>);
        }
        else
        {
            return jsonService.Deserialize<T>(await response.Content.ReadAsStringAsync());
        }
    }

Sto inserendo il servizio JSON nel costruttore.

IJsonService jsonService;

    public HttpClientService(IJsonService _jsonService)
    {
        jsonService = _jsonService;
    }

La domanda che ho è la seguente. La deserializzazione JSON è un problema di HTTPService o devo rimuovere quanto segue dal servizio http? (se la de-serializzazione fallisce, restituisce null)

return jsonService.Deserialize<T>(await response.Content.ReadAsStringAsync());

Il servizio Json è il seguente

public class JsonService : IJsonService
{
    public T Deserialize<T>(string input)
    {
        return JsonConvert.DeserializeObject<T>(input);
    }

    public string Serialize<T>(T input)
    {
        return JsonConvert.SerializeObject(input);
    }
}
    
posta Kevin Vella 04.07.2017 - 13:59
fonte

2 risposte

1

Questo è un po 'soggettivo, ma personalmente ritengo che dipenda interamente dal fatto che tutte le richieste di HttpClientService inviino / ricevano JSON. Lasciatemi spiegare. L'utilizzo di HttpClientService funziona indipendentemente da JsonService ha il vantaggio della flessibilità. Ciò significa che puoi gestire facilmente le richieste JSON con la stessa facilità con le altre. Aggiunge anche un ulteriore passaggio per elaborare le richieste JSON poiché ovviamente bisognerà serializzare / deserializzare di conseguenza, il che naturalmente ha lo svantaggio di ulteriore complessità nella progettazione del programma.

Se tutte le richieste saranno richieste JSON, non sarà più "facoltativo" passare attraverso JsonService . Quindi, il vantaggio della flessibilità non si applica e quindi si otterrebbe lo svantaggio della complessità solo se li tenessi separati.

In base al tuo codice, sembrerebbe che tu stia già forzando il ritorno delle richieste a Task<T> , il che significa che stai già prendendo in carico te stesso per analizzare e interpretare il risultato. Pertanto, ti consigliamo di integrare completamente JsonService in HttpClientService o di riscrivere HttpClientService per assumere un ruolo meno aggressivo nella gestione dell'analisi dei messaggi se questo non soddisfa i tuoi requisiti.

    
risposta data 04.07.2017 - 14:34
fonte
1

Non sono sicuro che tu stia chiedendo se hai bisogno di un servizio di json o se dovresti usare l'incency della dipendenza per questo ... presumo che quest'ultimo sia il primo in assoluto. Altrimenti, significherebbe che non sai cosa stai facendo.

In questo caso non è possibile dirti se dovresti usare use dependency injection ma puoi rispondere ad alcune domande per avere una ragione per entrambe le opzioni: Perché usiamo l'iniezione di dipendenza in primo luogo? Soprattutto per poter scambiare un servizio in futuro o per deriderlo per i test. Quanto è probabile nel tuo caso? Lo sostituirai con qualcos'altro? Ha senso? è tutto possibile?

Un altro motivo dell'iniezione di dipendenza è che si dispone di un solo posto in cui si configura un servizio. Usi le impostazioni personalizzate per il (de) serializzatore? C'è più di un modulo che utilizzerà questo servizio? Vuoi utilizzare le stesse impostazioni ovunque o vuoi che siano facilmente regolabili?

Se la maggior parte delle tue risposte è si allora utilizzerei un servizio iniettabile altrimenti potrebbe non essere necessario.

    
risposta data 04.07.2017 - 17:01
fonte

Leggi altre domande sui tag