目前,如果我们想从数据库中获取记录列表,我们的DAL会将DataTable返回到业务层,然后将相同的DataTable返回给我们的调用接口(在本例中为asp.vb页面)。 / p>
但是我不相信我们应该从BLL返回DataTable,我一直认为最好根据存储过程中的字段返回强类型集合 例如
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
实现这一目标的最佳方法是迭代我们的DataTable,并为每个DataRow创建一个新的MyCustomType对象并将其添加到集合中,然后返回集合吗?
感谢。
答案 0 :(得分:2)
这就是我们在工作的地方做的事情。在我们的例子中,我们得到一个DataReader
并手动填充类实例的字段。我们还从List<MyClass>
派生出一个新的列表类型。确保正确检查DBNull.Value
和正确的转换以及所有这些。
答案 1 :(得分:2)
看起来你的设计试图将责任分开但却停止了一半。将与DataTable一样模糊的东西返回到表示层,将其隐式地耦合到数据源的特定模式知识。最有可能的是,DataTable包含演示文稿甚至不需要的信息。处理BLL中的细节并将强类型的有目的对象返回到PL,这与您尝试设计的模型更加一致。
答案 2 :(得分:0)
这是一个实用程序的链接,可以帮助将DataTable映射到MyCustomType对象:
http://www.eggheadcafe.com/articles/20040221.asp
它有点旧,但可能会有所帮助。也许还有其他一些工具,比如AutoMapper。