gpt4 book ai didi

c# - WCF 层中的 DTO 与业务对象

转载 作者:行者123 更新时间:2023-11-30 22:18:35 24 4
gpt4 key购买 nike

我们的应用程序中有两个项目:

  1. Web UI 项目(aspx 页面)。
  2. WCF 项目。

这两个部分将进一步调用相同的 BL 和 DAL 层。这是架构:

网络项目:

enter image description here

WCF 项目(将使用 REST):

enter image description here

上面提到的业务对象和DTO的例子:

public class User
{
public int UserID { get; set; }
public string UserName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}

public class UserDTO
{
public int UserID { get; set; }
public string UserName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}

是否值得为 WCF REST 层提供一个单独的数据传输对象 UserDTO.cs?我们已经将 User.cs 作为 Web 项目、BL 和 DAL 使用的业务对象。此外,在我们的 WCF REST 层中,我们仅将 DTO 用于输入婴儿车:

  public MyResponse CreateUser(User user)
{

从这个方法我们通过一些映射器将 DTO 转换为业务对象(即 UserDTO 到 User.cs 对象)并将其传递给只接受业务对象而不接受 DTO 的 BL 层。也就是说,从 WCF 将业务对象传递到 BL 和 DAL 的角度来看,它的行为与 UI 将业务对象传递到 BL 和 DAL 层的方式完全相同。

使用 2 个单独的数据传输对象是否有实际优势?我问这个问题是因为 IMO 这将是多余的,我们应该使用一个数据传输对象,即 Web 项目和 WCF 项目的业务对象。

最佳答案

对我来说,是的,这样做总是值得的,但如果您使用对象进行 AJAX 调用。

在这种情况下,它会发挥作用:

public class User
{
public int UserID { get; set; }
public string UserName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}

public class UserDTO
{
// Hide the UserID
public string UserName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}

您真的希望用户能够看到 AJAX 响应并获得用户 ID 吗?可能不会。这就是我们使用单独的 DTO 的原因。它还确保您只使用轻量级对象,而不是完整的、可能很重的对象来进行客户端和服务器之间的数据传输。

当然你也可以这样做:

var query = GetYourUsers();

return query.Select(a => new { a.UserName, a.FirstName, a.LastName });

哪个更轻量级,那么你可以使用User对象从客户端发送数据到服务器端,并使用一个工具,比如Value Injector将客户端发送的值注入(inject)服务器上的完整对象。

关于c# - WCF 层中的 DTO 与业务对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16011898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com