gpt4 book ai didi

c# - 限制对特定程序集的访问

转载 作者:行者123 更新时间:2023-11-30 15:56:10 25 4
gpt4 key购买 nike

我正在使用 sql server 开发一个 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 Server 数据库。

第三个程序集Service是前面的链接。

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

在 sql server 中,Attribution.UserIdUser.Id 是相同的数据,位于 2 个单独的表中,通过 Ìnner join 链接.

Attribution.UserId 必须公开,因为我需要从 RepositoryService 等访问...但我不需要它在应用程序的“逻辑”部分,我需要的是 Attribution.User

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

有没有办法限制对 Attribution.UserId 属性的访问到 Service 程序集?还是在 AttributionService 类中查询 User DTO 是一种“违反良好做法”?

非常感谢您的推荐。

`

最佳答案

一个选择是制作内部属性的set并使用InternalsVisibleTo属性以授予对存储库程序集内部的访问权限。

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

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

关于c# - 限制对特定程序集的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47469207/

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