我正在使用模型UserRepository-> User
存储库用于保存和加载用户。
我希望能够在存储库中设置ID,但我不希望它被UI访问。
用户和存储库位于Core项目中,而UI位于Web中。
有没有办法做到这一点,比如属性的修饰符,还是应该将ID放在User构造函数中?
由于
答案 0 :(得分:8)
您可以使用没有setter的属性和这样的私有变量:
private int _id; //Set locally
public int ID
{
get { return _id; }
}
//in the class _id = 5;
或者使用具有私有设置器的自动属性,如下所示:
public int ID { get; private set; }
//in the class ID = 5; this won't work outside the class
在第二个/自动情况下,它实际上只是编译器执行第一个示例,只是在眼睛上更快更轻松。
答案 1 :(得分:-1)
我使用过这个模式(不熟悉C#,但这个想法应该有效):
class Foo
{
protected int id;
public int GetID()
{
return (ID);
}
}
class MutableFoo : Foo
{
public void SetID(int val)
{
id = val;
}
}
然后UI只处理“Foo”类,它是只读的,而其他部分可以处理读/写的“MutableFoo”。您应该只能创建“MutableFoo”的实例,然后将它们传递给代码的其他部分,然后将其作为“Foo”接收,这个UI代码将具有对对象的只读访问权限,而其他部分可以读取 - 写访问。
我可能也会把“Foo”抽象化(我想不出我没有的情况)。