Domanda

Ho deciso che restituire set di dati, lavorare con set di dati e database in un'app front-end è una pessima idea. Quindi, con la magia dei generici, sto restituendo un elenco generico tramite chiamata Webservice (non WCF semplicemente semplice o asmx). Funziona dandy fintanto che devi restituire un elenco per chiamata al tuo servizio web.

Lo scenario in cui mi imbatto è che ho una schermata più coinvolta in cui ci sono alcuni menu a discesa e così via. Devo associare questi elenchi a discesa a un elenco generico. Il problema è che non desidero effettuare diverse chiamate Web, una per ciascun menu a discesa, per ottenere i miei dati. In passato avrei appena restituito un set di dati e associato un menu a discesa a una tabella specifica nel set di dati.

Quindi, sarebbe super restituire più elenchi generici in una chiamata web.

Cose che ho provato:

  1. Utilizzo di un elenco di elenchi
  2. Utilizzo di una raccolta di elenchi generici
  3. Creando una classe base e usando una raccolta di List<Base>, ci sono problemi di conversione quando si tenta di inserire oggetti in tale List<MyOneObject>.
  4. Creazione di una classe con proprietà che restituiscono List<MySecondObject>, List<MyType>, ecc. Funziona ma è un po 'disordinato ... Nell'app ho molte classi e schermate in cui ciò potrebbe accadere. Potrei creare una classe come questa che ha proprietà <=> per ogni classe, ma come ho detto penso che possa sfuggire al controllo.

Quindi a questo punto ho due opzioni, # 4 nell'elenco sopra, o semplicemente restituisco un set di dati che preferirei non fare: 0)

Qualcuno l'ha mai incontrato prima?

È stato utile?

Soluzione

Beh, non penso che restituire più elenchi sia una buona idea, ma se lo farai, creerei una classe wrapper con ogni elenco esposto come proprietà in quella classe.

Qualcosa di simile

class Wrapper
{
   public List<object1> Object1List {get;set;}
   public List<object1> Object2List {get;set;}

}

Altri suggerimenti

La risposta è # 4, tramite una classe, quella o più chiamate, che preferiresti non fare

Beh, sembra che oggi inizierò tutte le mie risposte con una domanda? Perché non vuoi fare più chiamate dietro la scena?

Se si utilizza una chiamata asincrona p & # 229; menu a discesa / controllo che devi associare per un'esperienza utente più fluida. (soprattutto per elenchi indipendenti di grandi dimensioni) semplicemente perché se si esegue una sola chiamata, tutti i menu a discesa / i controlli dovranno attendere la restituzione di tutti gli altri dati di controllo.

Detto questo: Se le liste che stai restituendo ravvicinate tra loro potrebbero usare un dizionario, usando key per rappresentare & Quot; nome della proprietà & Quot; e il valore rappresenta bene il valore. Pochissimo codice richiede e la conversione di qualunque sorgente sia in un dizionario con .ToDictionary () è piuttosto semplice (se la fonte non è IEnumerable implementando .ToDictionary () per quella fonte è di solito semplice)

Dato il tuo scenario, direi che restituire il risultato in XML sarebbe il modo migliore di procedere. Non solo puoi restituire tutti gli elenchi che desideri, ma puoi organizzarli in qualsiasi modo e, cosa più importante, questa sarebbe una soluzione universalmente linguistica. È inoltre possibile trasformare il set di risultati direttamente in XML.

Se si restituisce una classe .NET, si è limitati alle sole lingue .NET che chiamano il servizio e, se questo è cambiato, è necessario riscrivere le classi wrapper, ecc. Con XML è possibile chiamare il servizio da qualsiasi lingua. Quindi, se stai provando a disaccoppiare l'app front-end dal tuo livello dati / modello, questa sarebbe una buona strada da prendere.

Se lo desideri, puoi comunque deserializzare il risultato XML in una classe .NET, oppure estrarre direttamente i dati. LINQ to XML è veloce e facile da usare e ti permetterebbe di trasformare il risultato se necessario.

<result>
  <dropdownA_item>
     <Value/>
  </dropdownA_item>
  <dropdownA_item>
  <dropdownA_item>
  <dropdownB_item>
  <dropdownB_item>
  <dropdwonC_item>
  // return as many different lists for as many different drop downs
</result>

// manually extract the data or deserialize into .net class
XElement result = GetResult();
dropdownBox[x].Items = result // you could even have an array of dropDownBoxes[x] and bind to all of them in one loop
    .Where(o => o.Name == "dropdown" + x)
    .Select(o => o.Element("Value").Value) );
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top