MODIFICATO PER CHIARIMENTO
In passato, ho visto un intero tipo di risoluzioni e confusioni. Alcuni spiccano davvero. Una risoluzione particolare che ho inizialmente pensato come un fondente forse merita una categoria a parte.
Potrebbe essere considerato un hack o un pattern, in quanto un modello di design è solo un pezzo di codice riutilizzabile. Quindi, è ancora conforme alla definizione: link
Probabilmente ha già un nome ma non l'ho visto in letteratura. Mi stavo chiedendo se qualcuno conosce un altro nome per quello che ho etichettato come "modello espositore (hack)".
Ne ho incluso un esempio sotto. Questo codice viene utilizzato per esporre i dati che non sono disponibili per un'origine dati. Invece, i risultati non vengono generati finché non viene chiamato un metodo di associazione dati. Sfortunatamente, questi risultati non vengono memorizzati da nessuna parte nell'origine dati dopo l'esecuzione. Ciò è dovuto a una svista (o cattiva progettazione) nell'API di terze parti. Quindi, i risultati vengono passati a un ripetitore da archiviare localmente, prima di restituirli come un PageDataCollection popolato:
public static PageDataCollection Search(this SearchDataSource searchDataSource)
{
PageDataCollection results = new PageDataCollection();
//This is a dummy repeater whose only purpose is to provide a way of
//iterating over the search results
Repeater dummy = new Repeater();
dummy.ItemDataBound += delegate(Object sender, RepeaterItemEventArgs e)
{
if (e != null && e.Item != null && e.Item.DataItem != null)
{
PageData pageData = e.Item.DataItem as PageData;
if (pageData != null)
{
results.Add(pageData);
}
}
};
dummy.DataSource = searchDataSource;
dummy.DataBind();
return results;
}