C# 我们可以将数据表从业务层传递到表示层吗?
我正在做一个三层架构的项目,我需要问一下,如果数据表来自数据层,我们是否可以将它直接传递到表示层,这是一个好的做法?在Cs页面中C# 我们可以将数据表从业务层传递到表示层吗?,c#,asp.net,C#,Asp.net,我正在做一个三层架构的项目,我需要问一下,如果数据表来自数据层,我们是否可以将它直接传递到表示层,这是一个好的做法?在Cs页面中 public DataTable dtDistinctFRU; dtDistinctFRU= dsData.Tables[0]; 在aspx页面中 <% foreach (System.Data.DataRow row in dtDistinctFRU.Rows) { %> ....some html ... <% Response
public DataTable dtDistinctFRU;
dtDistinctFRU= dsData.Tables[0];
在aspx页面中
<% foreach (System.Data.DataRow row in dtDistinctFRU.Rows)
{
%>
....some html ...
<% Response.Write(rowNum); %>
…一些html。。。
是的,你可以,但这根本不是一个好的做法。最好为数据库中的每个数据表都有一个实体类。每个类都有类似于DB列的公共属性。所有这些都应该位于您的业务层之下。在数据访问层,以数据表的形式从数据库获取数据,传递到业务层,并将该表转换为实体对象的集合,然后传递到表示层
我觉得你的问题很有争议
在这种情况下,考虑以下几点作出决定:
更多信息,请在线阅读使用POCO和DataTable的好处。我从来没有这样做过,因为如果通过相同的对象,为什么首先需要这些不同的层?无论如何,因为这是一个建筑问题,所以没有正确的答案,只有观点 我的观点是:我喜欢业务运营,清楚地表明你对他们的期望,而不是CRUD运营。您只传递完成业务操作所需的内容,而在查询的情况下,您只返回UI真正需要的内容。这意味着您需要设计特定的数据协定,而不是通用数据表。这意味着数据层使用数据实体并将其映射到域实体(例如,首先使用EF代码)。然后将这些域实体映射到服务的数据传输对象;您在UI中使用的
你可以在上读这个系列来获得一些灵感(特别是第2部分)。你可以,但为什么?业务层应该从数据层获取(或多或少)原始数据,并对其应用所需的业务逻辑,并将转换后的数据传递给表示层(IMO)。否则,业务层只不过是一个传递层,而您的3层就变成了2层。您是否研究过这个主题?使用ADO.NET或Entity Framework或其他工具实现的数据库层是什么?如果您想将DataTable直接传递到表示层,这意味着您绕过了业务逻辑层,简而言之,您违反了三层体系结构:)