Devo creare una quarta classe?

3

Ho un compito semplice questo è quello che mi serve il codice da fare:

  1. Leggi i dati da una risorsa REST di terze parti.
  2. Analizza l'oggetto JSON in modo che corrisponda alla mia struttura interna.
  3. Salva i dati analizzati nel mio database.

Potrei semplicemente essere pigro e fare tutto in un unico metodo, ma voglio applicare le migliori pratiche, applicare i test e avere un codice pulito, ma fare attenzione alla sovrastruttura.

Il mio piano è di avere tre classi separate.

1. RestResourceReader
       List<OriginalResourceDTO> GetAll()


2. Parser
       List<ParsedResourceDTO> Parse(List<OriginalResourceDTO>)


3. ResourceRepository
       void Insert(List<ParsedResourceDTO>)

Quindi in queste tre classi ho tutte le funzionalità necessarie. Quindi qualcosa deve orchestrare quelle tre classi per fare qualcosa di utile.

Devo chiamare queste tre classi all'interno di "Main" in un'app console?

O dovrei creare una quarta classe chiamata Syncer, dove avrà un metodo di sincronizzazione che chiamerà tutte le funzionalità, e quindi chiamerà semplicemente quel metodo all'interno di Main?

Non so a volte mi sento come se stessi ingannando qualcosa di troppo semplice.

    
posta marcos.borunda 10.09.2017 - 00:44
fonte

2 risposte

2

La mia regola empirica: se sei in dubbio, usa la più semplice delle possibili soluzioni. Sarebbe eseguire le tre chiamate nel metodo Main ed evitare la classe Syncer a meno che tu conosci non ne abbia bisogno.

Ma se il metodo Main contiene anche altra logica oltre a queste tre linee - ad es. lettura di configurazioni, analisi dell'argomento della riga di comando e così via - quindi l'orchestrazione dovrebbe essere almeno estratta in un metodo separato.

    
risposta data 10.09.2017 - 17:23
fonte
1

In realtà, ciò che descrivi non è solo un modo per accedere e dati, ma in realtà una sequenza logica di passaggi per implementare un'operazione che chiamerei "importa dati da un servizio remoto" o "acquisisci nuovi dati".

Quindi utilizzerei una quarta classe in base all'attuazione del modello script di transazione di Martin Fowler .

Ci sono due modi per implementarlo: con una singola classe che incapsula i diversi script di transazione da eseguire, o usando una classe separata per ogni script di transazione, implementando quindi schema di comando

Vantaggi:

La transazione corrisponde a un livello più alto di astrazioni. Usandolo, contribuirai a pulire il codice evitando di mischiare diversi livelli di astrazione.

Se esegui questa transazione solo una volta nel tuo codice e per un singolo tipo di risorse, questo approccio potrebbe ovviamente sembrare eccessivamente ingegnerizzato.

Se disponi di centinaia di diversi tipi di risorse, questo approccio, insieme ad alcune intelligenti iniezioni di dipendenza, potrebbe aiutarti a scindere la logica generale dai tipi di risorse concreti. Ciò ti consentirà di riutilizzare la stessa transazione di importazione molte volte, il che ti farà risparmiare moltissimo tempo.

    
risposta data 10.09.2017 - 10:02
fonte

Leggi altre domande sui tag