限制对特定程序集的访问

Restrict access to a specific assembly

我正在使用 sql 服务器开发一个 Winforms 项目,分成几个程序集。

第一个程序集 Entities 包含 DTO,例如:

public class Attribution
{
    public short UserId { get; set; }
    public User User { get; set; }
}
public class User
{
    public short Id { get; set; }
}

第二个程序集 Repository 正在访问 Sql 服务器数据库。

第三次集会Service是上次集会link

还有其他层,但这不是重点。我当然需要应用程序中无处不在的 DTO。

在sql服务器中,Attribution.UserIdUser.Id是相同的数据,位于2个单独的表中,link由Ìnner join编辑。

Attribution.UserId 必须是 public 因为我需要从 RepositoryService 等访问...但我不需要它在 "logical"部分应用,我需要的是Attribution.User.

此时我有一个UserServiceclass,其中有一个GetUser()方法,我在我的AttributionService.GetAttribution()方法中调用这个方法来获取用户。

有没有办法限制 Attribution.UserId 属性 对 Service 程序集的访问?还是在AttributionService class中查询User DTO是一种"good practice violation"?

非常感谢您的推荐。

`

一个选项是使 属性 的 set internal 并使用 InternalsVisibleTo 属性来授予对存储库程序集内部结构的访问权限。

另一个技术性较低但更合乎逻辑的选择是将 setter 设为私有,并让修改它的唯一方法是 classes 构造函数。这样,您的存储库可以构建用户,但以后没有人可以修改 ID。

作为最后一个选项,您可以创建一个接口,该接口仅包含非存储库 classes 应该有权访问和传递的内容。我不是一个忠实粉丝,因为这意味着你必须将它转换回存储库中的具体 class,这基本上意味着你的存储库在撒谎(说它接受 ISomething,但如果ISomething 不是它期望的准确、具体的 Something