2

我有一个对象,其中包含在验证对象时检查的业务规则列表。

在类的顶部,我创建了 BusinessRule 类型的静态字段,如下所示:-

public class SyncFile : Waterstons.Patterns.Entities.BaseEntity<Guid>
{        
    public static BusinessRule NameRequiredRule = new BusinessRule("Name", "The audit file must have a name");
    ....


    protected override void Validate()
    {
        if (Id == default(Guid))
        {
            AddBrokenRule(IdRequiredRule);
        }
        ....

这导致代码分析抱怨我不应该有公共字段,除非它们是 const。我不确定我可以根据我使用它们的方式将它们定义为 const 。

那么有没有更好的方法来解决这个问题?我应该将它们公开为如下属性吗?

    public static BusinessRule _nameRequiredRule = new BusinessRule("Name", "The audit file must have a name");
    public static BusinessRule Test
    {
        get { return _nameRequiredRule; }
    }

还是有更好的方法来解决这个问题?

4

1 回答 1

9

您可以将静态字段声明更改为此

 public static readonly BusinessRule NameRequiredRule = new BusinessRule("Name", "The audit file must have a name");

所以要确保公共字段在执行过程中不会改变。还要注意使BusinessRule类不可变,这样不仅引用不能更改,NameRequiredRule而且实例内容在运行时也不能更改。

如果您不能强制执行不变性 - 考虑将NameRequiredRule静态字段声明为私有并创建一个静态属性。

private static BusinessRule _nameRequiredRule = new BusinessRule("Name", "The audit file must have a name");
public static BusinessRule NameRequiredRule
{
    get { return _nameRequiredRule; }
}
于 2013-01-16T10:13:41.330 回答