2

我正在做一个3层架构的项目,我需要问我们是否可以将数据表直接传递到表示层,因为它来自数据层,这是一个好习惯吗?

4

4 回答 4

4

是的,你可以,但这根本不是一个好习惯。更好的是,您对 DB 中的每个数据表都有一个实体类。每个类都有类似于您的数据库列的公共属性。所有这些东西都应该驻留在您的业务层下。在数据访问层以数据表的格式从数据库中获取数据,传递给业务层并将此表转换为实体对象的集合并传递给您的表示层。

于 2013-04-22T07:08:10.597 回答
1

恕我直言,您的问题很有争议

在这种情况下,请考虑以下几点来做出决定:

  1. 如果数据库提供程序是您使用 ADO.NET 或实体框架或任何其他 ORM 自定义实现的,则更改为 POCO 类并传递那些不使用 DataTable 的 POCO 实例。
  2. 如果您的结果不固定,请使用 DataTable,以便您可以创建 POCO 类。

在此处查看有关在三层架构中使用 DataTable 的旧文章。

阅读使用 POCO 和 DataTable 的在线好处以了解更多信息。

于 2013-04-22T07:15:15.433 回答
0

在 Cs 页面中............

public DataTable dtDistinctFRU;
dtDistinctFRU= dsData.Tables[0];

在 aspx 页面中…………

 <% foreach (System.Data.DataRow row in dtDistinctFRU.Rows)
     {
 %>
....some html ...

<% Response.Write(rowNum); %>
于 2013-04-22T07:05:17.000 回答
0

我从不这样做,因为如果你通过它们传递相同的对象,为什么你首先需要这些不同的层?无论如何,由于这是一个架构问题,因此没有正确答案,只有意见。

我的观点:我喜欢运营是业务运营,清楚地表明你对他们的期望,而不是 CRUD 运营。您只传递完成业务操作所需的内容,而在查询的情况下,您只取回您的 UI 真正需要的内容。这意味着您设计特定的数据合同而不是通用数据表。这意味着数据层使用数据实体并将它们映射到您的域实体(例如,首先使用 EF 代码)。然后将这些域实体映射到您服务的数据传输对象;您在 UI 中使用的。

您可以在http://tinyurl.com/d99w8rl阅读该系列文章以获得一些灵感(尤其是第 2 部分)。

于 2013-04-22T07:16:14.660 回答