这是捕获。我有一个业务对象,其中包含一个名为RegisterDate
的字段。像往常一样的业务规则说,一旦设置,就无法改变。
我首先考虑将此字段实现为属性并将setter定义为protected,从而阻止用户在创建对象后使用(和设置)它。但是在思考了一段时间后,我让我在属性可访问性规则中隐藏了业务规则。
我的第二个想法是将属性setter保留为public,在设置时实现异常,这使得业务规则非常明确。将有一个测试用例,希望每次有人试图设置它时都会抛出异常。
嗯,但这是避免行为的很多样板,为什么不让事情得到保护,甚至避免在代码的其他部分滥用?但后来我想知道,如果另一个开发人员意外更改了属性可访问性并再次公开,并且业务对象的用户开始使用违反业务规则的字段会怎么样?
这种情况的最佳方法是什么?你会如何解决这个问题?
答案 0 :(得分:3)
如果您只能在构造函数中设置它,则可以将该字段设为只读。
public class SomeClass
{
public SomeClass(DateTime regDate)
{
registerDate = regDate;
}
public DateTime RegisterDate { get { return registerDate; } }
private readonly DateTime registerDate;
}