Skip to main content
 首页 » 编程设计

c#之从 Web 服务返回域对象

2024年02月13日30findumars

这可能是一个哲学问题,但我想我应该在这里问,因为我有点分析瘫痪。

我目前正在开发一款基于浏览器的游戏(客户端 HTML/Javascript 和 WCF Web 服务以到达后端),我正在努力打造一个漂亮、丰富的领域模型。

所以这是我的问题。我有一个名为中队的类(class)

public class Squadron 
{ 
    public string SquadName { get; set; } 
    public User Owner { get; set; } 
    public int XPosition { get; set; } 
    public int YPosition { get; set; } 
    public int XTarget { get; set; } 
    public int YTarget { get; set; } 
} 

中队归用户所有

public class User 
{ 
    public string Username { get; set; } 
    public string Password { get; set; } 
    public string Email { get; set; } 
    public int UserID { get; set; } 
    public List<string> Roles { get; set; }  
} 

我还有一个 Squadron 存储库,它根据它的 ID 返回一个完全填充的 Squadron 对象。我有一个应该返回 Squadron 的网络服务(基本上是 GetSquadron)。但是,附加的用户对象有一些我可能不想暴露给任何客户端的信息(密码,一个明显的例子)。虽然看起来 Password 应该是这个域对象的一部分......但它似乎并不是我一直想要填充的东西。

我考虑过添加另一层逻辑(在填充域对象之后)以确保调用用户可以访问某些字段,但我想知道我可以在社区中找到哪些最佳实践。我尝试使用谷歌搜索,但运气不佳。

谢谢!

编辑:在任何人喋喋不休之前,密码已经过哈希处理。我从不在数据库中存储明文密码。我只是想我可能不应该返回密码,无论是否加密。

编辑 2 (Phillip):我填充了 User 对象,因为我确实需要在客户端向下放置其中的几个字段(用户名和用户 ID,可能还有电子邮件)。也许创建一些 DTO 就是问题的答案。我想我认为拥有一个跨所有层的通用模型会很好。

请您参考如下方法:

我会考虑用 Owner (User) 属性替换 UserID 属性。我看不出有任何真正的理由表明您需要 Squadron 中的整个 User 对象。但是,我不太了解您的设计或意图。传递用户密码也是一种非常糟糕的做法,即使它是加密的。

如果您确实需要 Squadron 对象中的人员详细信息,我建议创建一个不包含用户密码的新人员 View 模型。