我正在使用模型UserRepository->用户什么是只读属性的最佳方法
存储库用于保存和加载用户。
我希望能够在存储库中设置ID,但我不希望它被UI访问。
User和Repository可在Core项目中找到,并可在Web中找到UI。
有没有办法做到这一点,就像属性的修饰符,或者我应该把ID放在User构造器中?
感谢
我正在使用模型UserRepository->用户什么是只读属性的最佳方法
存储库用于保存和加载用户。
我希望能够在存储库中设置ID,但我不希望它被UI访问。
User和Repository可在Core项目中找到,并可在Web中找到UI。
有没有办法做到这一点,就像属性的修饰符,或者我应该把ID放在User构造器中?
感谢
您可以使用属性,而不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
在第二个/自动的情况下,它确实只是编译器做第一个例子,只是更快,更容易。
我已经使用这个彭定康(不熟悉C#这样,但这个想法应该工作):
class Foo
{
protected int id;
public int GetID()
{
return (ID);
}
}
class MutableFoo : Foo
{
public void SetID(int val)
{
id = val;
}
}
那么UI只与它的“富”类交易只读,而其它部分可以处理读/写的“MutableFoo”。您应该只能创建“MutableFoo”的实例,然后将它们传递到代码的其他部分,然后将其作为“Foo”接收,这是UI代码对对象具有只读访问权限,而其他部分可以读取 - 写入访问。
我可能会做“富”抽象以及(我想不到的情况下,我没有)。
+1您的回答比我的好:) – Kelsey 2010-03-12 19:47:59
如果适用,您可以使用保护而不是私人。这将适用于第一版和自动属性版本。 – Brian 2010-03-12 21:33:05
@Brian - 好点,如果您只想在同一个程序集中公开它,也可以使用'internal'修饰符。在这种情况下,您的数据层可以设置它,但不是另一个项目中的UI层,等等。 – 2010-03-12 21:37:43