WCF / domanda di architettura del servizio web

1

Ho l'obbligo di creare un webservice per esporre determinati elementi da un CMS come servizio Web, e ho bisogno di alcuni suggerimenti: la struttura degli elementi è tale:

item
- field 1
- field 2
- field 3
- field 4

Quindi, si potrebbe pensare che la classe per questo sarà:

public class MyItem
{
  public string ItemName { get; set; }
  public List<MyField> Fields { get; set; }
}

public class MyField
{
  public string FieldName { get; set; }
  public string FieldValue { get; set; } //they are always string (except - see below)
}

Questo funziona quando è sempre un livello profondo, ma a volte, uno dei campi è in realtà un punto di un altro elemento ( MyItem ) o più MyItem ( List<MyItem> ), quindi ho pensato di cambiare il struttura di MyField come segue, per rendere FieldValue come object ;

public class MyField
{
  public string FieldName { get; set; }
  public object FieldValue { get; set; } //changed to object
}

Quindi, ora, posso mettere tutto ciò che voglio lì dentro. Questo è fantastico in teoria, ma come lo consumeranno i clienti? Sospetto che quando gli utenti fanno riferimento a questo servizio Web, non sapranno quale oggetto viene restituito in quel campo? Questo sembra un design non-così-buono. C'è un approccio migliore a questo?

    
posta M.R. 21.09.2012 - 16:42
fonte

1 risposta

1

Che cosa succede cambiando la struttura della classe MyField per avere una proprietà di tipo MyFieldValue che ha una semplice proprietà stringa e un elenco di MyItem (per contenere un singolo MyItem o molti) ad es.

public class MyField
{
    public string FieldName { get; set; }
    public MyFieldValue FieldValue { get; set; }
}

public class MyFieldValue
{
    public string Text { get; set; }
    public List<MyItem> Items { get; set; }
}

Oppure un'opzione più semplice potrebbe essere quella di aggiungere le varie opzioni come proprietà a MyField ad es.

public class MyField
{
    public string FieldName { get; set; }
    public string FieldValue1 { get; set; } // With better property names
    public MyItem FieldValue2 { get; set; } // This property may be redundant as you could just add a single instance to the list below
    public List<MyItem> FieldValue3 { get; set; }
}

Quindi spetterà al consumatore controllare ciascuna proprietà.

    
risposta data 21.09.2012 - 17:29
fonte

Leggi altre domande sui tag