使用Repository Pattern进行类封装

时间:2010-10-18 21:24:02

标签: c# asp.net encapsulation

我使用存储库模式从数据库中提取信息。我有两个类,报告 reportRepository

我遇到的问题是,由于 reportReposity 必须填写报告对象的所有详细信息,因此报告中的所有成员都必须可公开访问。< / p>

有没有办法可以确保只有存储库类可以访问报表类的某些方法,只有它可以设置其他类不能的某些属性,有点像 friend < / em>在c ++中。还是有一种完全不同的处理这种情况的方式?

我在ASP.NET 2.0中使用C#

2 个答案:

答案 0 :(得分:1)

您可以将访问修饰符应用于属性,例如:

public string Name { get; internal set; }

Internal为同一程序集中的任何类型提供对指定属性的写访问权限。

答案 1 :(得分:1)

这看起来有点时髦,但它会做你的事后,任何带有'protected'修饰符的属性只能在该类中访问 AND 任何派生类

public class Person
{
    public string Name { get; protected set; }
    public int Age { get; protected set; }
}

public class PersonRepository
{
    public Person Get()
    {
        return new PersonBuilder("TestName", 25);
    }

    private class PersonBuilder : Person
    {
        public PersonBuilder(string name, int age)
        {
            this.Name = name;
            this.Age = age;
        }
    }
}

因此,除非您在存储库中,否则无法看到Person派生类PersonBuilder,它具有填充Person的受保护属性的构造函数。在外部它看起来像你的神奇填充字段而不使用setter或构造函数。