1

Actuellement, si nous voulons obtenir une liste d'enregistrements de la base de données, notre DAL renvoie un DataTable à notre couche de gestion, qui renvoie alors le même DataTable à notre interface d'appel (dans ce cas un asp page .vb).Retour des résultats de la procédure stockée fortement typée

Cependant, je ne crois pas que nous devrions renvoyer un DataTable de la BLL, j'ai toujours pensé qu'il serait préférable de retourner une collection fortement typée basée sur les champs de la procédure stockée par exemple.

public Class MyCustomType 
    public customerId as int32 
    public name as string 
end Class 

public function GetCustomers() as Generic.ICollection(Of MyCustomType) 
    //call to DAL here 
end function 

Est-ce que la meilleure façon d'atteindre cet être itérer sur notre DataTable, et pour chaque DataRow, créez un nouvel objet MyCustomType et l'ajouter à la collection, puis retourner la collection?

Merci.

Répondre

1

Voici un lien vers un utilitaire qui peut aider à cartographier le DataTable à l'objet MyCustomType:

http://www.eggheadcafe.com/articles/20040221.asp

Il est un peu vieux, mais peut être utile. Peut-être y a-t-il d'autres outils comme AutoMapper.

+1

J'ai téléchargé AutoMapper et il était beaucoup plus rapide que les exemples dans l'article même s'il utilise des attributs de réflexion plutôt que de propriété. Merci. –

1

Voilà comment nous le faisons là où je travaille. Dans notre cas, nous obtenons un DataReader et remplissons manuellement les champs de l'instance de classe. Nous dérivons également un nouveau type de liste de List<MyClass> pour l'accompagner. Assurez-vous que vous faites une vérification correcte pour DBNull.Value et la conversion appropriée et tout cela.

+0

aucun commentaire pour une rétrograda? – lincolnk

2

Il semble que votre conception tente de séparer les responsabilités, mais s'arrête à mi-chemin. Renvoyer quelque chose d'aussi nébuleux qu'un DataTable à votre couche de présentation est implicitement couplé à une connaissance spécifique du schéma de la source de données. Très probablement, le DataTable contient des informations dont la présentation n'a même pas besoin. Gérer les spécificités de votre BLL et renvoyer un objet utile fortement typé à votre PL est plus cohérent avec le modèle pour lequel vous essayez de créer.