我一直在审查3层设计网上的例子,我注意到大多数样本都会返回数据集或数据表。令我困惑的是,如果您希望返回类型的通用列表,那么您可以在列表所基于的类型中使用属性或方法?作为使用Name属性的示例,该属性根据数据以特定方式连接各个字段,如果List绑定到表单上的控件,则Name属性可以用作数据字段。如果你想在使用数据集或表时完成相同的事情,你必须从数据库中返回数据以实现相同的目标(我尽量不使用数据集或数据表,所以我可能对此声明非常错误。:))
让我感到困惑的部分是关于重用代码,对我来说,似乎重用代码的唯一方法是将数据检索到数据集或数据表中,然后遍历数据并将其添加到List中,这通常是3层的最佳实践,或者没有数据集和数据表可以做到这一点。
以下链接中的示例本质上演示了使用数据集或表格,然后将其添加到对象中,但我不得不问这是否是最佳做法?
http://www.codeproject.com/Articles/36847/Three-Layer-Architecture-in-C-NET
由于
答案 0 :(得分:2)
使用DataTable
s是一个特定的网络主义。其背后的原因是它们包含有关数据结构的元数据,这使得DataGrid
(以及其他此类组件)可以自动显示数据而无需使用反射等。我的猜测是,这是RAD的MS Access方法的遗产,其目的是实现商业人士和#34;通过直接从SQL模式生成用户界面来创建应用程序,基本上与分层设计相反。这种传统似乎已经渗透到了这个世界。
使用"普通"没有错。数据结构,只要你愿意放弃RAD功能,最近的趋势似乎也是为了摆脱这种权衡。 (例如,使用Web Forms'强类型数据控件和MVC的模型绑定功能。)
另外,更一般地说,MVC之前建立的Code Project文章并不是一般软件架构的明智之源。
答案 1 :(得分:0)
您应该携带数据的内容完全取决于您的需求。
如果从数据库中检索数据并将其绑定到数据网格,数据集可能会为您提供完美的解决方案。如果您想要一些其他数据跟踪其自身更新状态的方法,您应该查看实体框架。如果您检索数据并通过Web服务发送数据以进行跨平台或跨域处理,则需要将数据加载到您自己的其他可序列化类中。
看看下面的文章。它有点老,针对EF4,但它很好地总结了不同策略的利弊。 (系列中有三篇文章,我建议你全部阅读)
答案 2 :(得分:0)
我认为您找到的样本使用数据表和数据集,因为它是显示3层设计的简单方法。现在,实体框架已基本取代了样本中提到的“数据访问层”。
在我编写数据访问层的实体框架之前,我将返回一个我从数据库构建的通用列表。要运行更新,删除或插入,我会将对象作为参数传递给方法,然后使用对象的属性作为sql语句中的值。出于你提到的原因,我更喜欢这样做,但也因为它允许我彼此独立地更改对象定义或数据库模式(甚至使用不同的数据库)。