加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使一个对象只能访问同一个程序集中的另一个对象?

发布时间:2020-12-16 00:12:05 所属栏目:百科 来源:网络整理
导读:每个业务对象都有一个包含sql调用的匹配对象.我想限制这些sql对象,它们只能由匹配的业务对象使用.怎么能实现这一目标? 更新 Greg提出了关于可测试性的观点.由于SqlObjects将包含非常特定于业务流程的sql,因此我不希望它们在多个buiness对象中重用. (基本的C
每个业务对象都有一个包含sql调用的匹配对象.我想限制这些sql对象,它们只能由匹配的业务对象使用.怎么能实现这一目标?

更新

Greg提出了关于可测试性的观点.由于SqlObjects将包含非常特定于业务流程的sql,因此我不希望它们在多个buiness对象中重用. (基本的CRUD操作都是代码生成的)有没有办法使SqlObjects只能访问业务程序集中的一个业务对象(如yshuditelu和Greg Beech所示)并将SqlObjects暴露给单元测试程序集?

解决方法

如果这是您想要或需要采用的方法,则可以在业务对象中使sql对象成为私有类.

public class BusinessObject
{
    private class SqlObject { }
}

此外,通过使用部分类,您可以根据需要将其分成单独的文件.

//in one file
public partial class BusinessObject
{
    //business object implementation
}

//in another file
public partial class BusinessObject
{
    private class SqlObject { }
}

Joel在下面的评论中提出了一个很好的观点:“SqlObject仍然可以从一个公共类型继承,因为连接信息可以在这些”内部“类之间共享.”这绝对是真的,而且可能非常有益.

为了响应您的编辑,单元测试只能测试公共类和函数(在测试中不使用反射).我能想到的唯一选择就是:

>为每个business / sql对象创建一个程序集
>将私有类SqlObject更改为内部类SqlObject
>然后使用[InternalsVisibleTo(“UnitTestsAssembly”)]进行项目

此外,此时您不必将sql对象保留为嵌套类.一般来说,我认为这可能会增加比它增加的价值更多的复杂性,但我完全理解每种情况都不同,如果你的要求/期望推动了你,我祝你好.就个人而言,我认为我会将SqlObjects设为公共(或内部内部可见单元测试),并接受这一事实,即这意味着sql类暴露给所有业务类.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读