È malvagio modellare le risposte JSON alle classi quando sono per lo più smilar?

1

Ecco il problema:

Durante l'implementazione di un wrapper C # per un'API online ( Discogs ) mi sono trovato di fronte a un dilemma: molto spesso le risposte restituite hanno per lo più membri simili e mentre modellano queste risposte alle classi, alcune domande su quali vie andare sarebbe la migliore.

Esempio:

Interrogazione per un ' release ' o un 'master "restituirà un oggetto che contiene una matrice di" artista ", tuttavia questi" artisti "non hanno esattamente gli stessi membri.

Attualmente ho deciso di rappresentare questi 'artisti' come una singola classe 'Artist', contro l'esistenza di rispettive classi 'ReleaseArtist' e 'MasterArtist' che diventano presto molto confuse anche se sorge un altro problema: quando una categoria (master o release) non restituisce questi membri, saranno nulli. Anche se potrebbe sembrare confuso, trovo che sia meno confusionario rispetto alla precedente situazione in quanto ho affrontato il problema semplicemente non mostrando membri nulli durante la visualizzazione di questi oggetti.

È questo l'approccio giusto da seguire?

Un esempio di queste differenze:

public class Artist
{
    public List<Alias> Aliases { get; set; }
    public string DataQuality { get; set; }
    public List<Image> Images { get; set; }
    public string Name { get; set; }
    public List<string> NameVariations { get; set; }
    public string Profile { get; set; }
    public string Realname { get; set; }
    public string ReleasesUrl { get; set; }
    public string ResourceUrl { get; set; }
    public string Uri { get; set; }
    public List<string> Urls { get; set; }
}

public class ReleaseArtist
{
    public string Join { get; set; }
    public string Name { get; set; }
    public string Anv { get; set; }
    public string Tracks { get; set; }
    public string Role { get; set; }
    public string ResourceUrl { get; set; }
    public int Id { get; set; }
}

Modifica:

Ho deciso di mantenere le cose semplici come possono essere: separate.

Ci sono pochi nomi strani ma sarà sempre meno confusionario rispetto alle situazioni precedenti.

    
posta Aybe 28.06.2013 - 01:21
fonte

1 risposta

2

Ho anche riscontrato problemi simili e ho finito per andare nella direzione opposta: controlla disqussharp per dettagli viscerali. La tattica che usavo era una classe base comune con varianti per cose che cambiavano tra chiamate diverse.

Penso che avere una singola classe - o almeno una classe base comune con le proprietà comuni - sia molto più conveniente per i consumatori e questa è la strada da percorrere. Inoltre, non esiste una legge secondo la quale le classi che si restituiscono devono corrispondere alle implementazioni dei cavi se ciò ha più senso per i chiamanti della propria biblioteca. Se il servizio fosse così conveniente, perché dovresti scrivere un wrapper in primo luogo?

    
risposta data 28.06.2013 - 01:30
fonte

Leggi altre domande sui tag