J'ai vu des systèmes qui utilisent la Réflexion et les attributs sur les Propriétés ou les champs de cartes DataReaders à des objets. (Un peu comme ce qu'LinqToSql.) Ils sauvent un peu de frappe et peut réduire le nombre d'erreurs lors du codage pour DBNull etc. Une fois que vous mettre en cache le code généré, ils peuvent être plus rapide que la plupart des écrits à la main de code, afin de ne considérer la "haute route" si vous faites beaucoup.
Voir "Une Défense de la Réflexion .NET" pour un exemple de cette.
Vous pouvez ensuite écrire le code comme
class CustomerDTO
{
[Field("id")]
public int? CustomerId;
[Field("name")]
public string CustomerName;
}
...
using (DataReader reader = ...)
{
List<CustomerDTO> customers = reader.AutoMap<CustomerDTO>()
.ToList();
}
(AutoMap(), est une méthode d'extension)
@Stilgar, merci pour ce grand commentaire
Si sont en mesure de vous êtes probablement mieux d'utiliser NHibernate, EF ou Linq to Sql, etc Toutefois sur l'ancien projet (ou pour d'autres (parfois) raisons, par exemple, "pas inventé ici", "l'amour de la stockées procs", etc) Il n'est pas toujours possible d'utiliser un ORM, donc un poids plus léger système peut être utile d'avoir les manches"
Si vous avez tous besoin de trop écrire beaucoup de IDataReader boucle, vous verrez l'avantage de réduire le codage (et les erreurs) sans avoir à modifier l'architecture du système sur lequel vous travaillez. Ce n'est pas de dire que c'est une bonne architecture pour commencer..
Je suis en supposant que CustomerDTO ne parviendra pas à sortir de la couche d'accès aux données et des objets composites, etc sera constitué par la couche d'accès aux données à l'aide de la DTO des objets.