我使用存储库模式从数据库中提取信息。我有两个类,报告和 reportRepository 。
我遇到的问题是,由于 reportReposity 必须填写报告对象的所有详细信息,因此报告中的所有成员都必须可公开访问。< / p>
有没有办法可以确保只有存储库类可以访问报表类的某些方法,只有它可以设置其他类不能的某些属性,有点像 friend < / em>在c ++中。还是有一种完全不同的处理这种情况的方式?
我在ASP.NET 2.0中使用C#
答案 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或构造函数。