我正在做一个3层架构的项目,我需要问我们是否可以将数据表直接传递到表示层,因为它来自数据层,这是一个好习惯吗?
4 回答
是的,你可以,但这根本不是一个好习惯。更好的是,您对 DB 中的每个数据表都有一个实体类。每个类都有类似于您的数据库列的公共属性。所有这些东西都应该驻留在您的业务层下。在数据访问层以数据表的格式从数据库中获取数据,传递给业务层并将此表转换为实体对象的集合并传递给您的表示层。
恕我直言,您的问题很有争议
在这种情况下,请考虑以下几点来做出决定:
- 如果数据库提供程序是您使用 ADO.NET 或实体框架或任何其他 ORM 自定义实现的,则更改为 POCO 类并传递那些不使用 DataTable 的 POCO 实例。
- 如果您的结果不固定,请使用 DataTable,以便您可以创建 POCO 类。
在此处查看有关在三层架构中使用 DataTable 的旧文章。
阅读使用 POCO 和 DataTable 的在线好处以了解更多信息。
在 Cs 页面中............
public DataTable dtDistinctFRU;
dtDistinctFRU= dsData.Tables[0];
在 aspx 页面中…………
<% foreach (System.Data.DataRow row in dtDistinctFRU.Rows)
{
%>
....some html ...
<% Response.Write(rowNum); %>
我从不这样做,因为如果你通过它们传递相同的对象,为什么你首先需要这些不同的层?无论如何,由于这是一个架构问题,因此没有正确答案,只有意见。
我的观点:我喜欢运营是业务运营,清楚地表明你对他们的期望,而不是 CRUD 运营。您只传递完成业务操作所需的内容,而在查询的情况下,您只取回您的 UI 真正需要的内容。这意味着您设计特定的数据合同而不是通用数据表。这意味着数据层使用数据实体并将它们映射到您的域实体(例如,首先使用 EF 代码)。然后将这些域实体映射到您服务的数据传输对象;您在 UI 中使用的。
您可以在http://tinyurl.com/d99w8rl阅读该系列文章以获得一些灵感(尤其是第 2 部分)。