是'有'物业良好实践?

时间:2016-08-07 20:27:44

标签: c# mvvm properties

有时候在我的模特中,我只会实现“只有' Has'属性(例如HasDescription)因此我可以使用if (model.HasDescription) { ... }轻松检查模型外部的属性的有效性。

实现可能类似于:

public bool HasDescription => Description != null && Description != string.Empty;

这是好习惯吗?更具体地说,如果我采取这种方法,我应该将这个条件逻辑移到别处吗?也许进入扩展方法?

2 个答案:

答案 0 :(得分:1)

有时候这是个人偏好的问题;拥有一堆HasX属性可以。我有时会出于验证原因这样做(我发现在使用FoolProof时使用类似于MVC应用程序的属性很有效)。虽然要添加一堆HasX属性可能很麻烦......所以,如果你在控制器中使用这些属性进行评估,那就是个人喜好。如果这是你想采取的方法,我不会担心。

如果您将其用于验证目的,有时在需要基于模型的评估时,可以使用IsValid方法来确定验证状态。这将比MVC更像MVVM,但它可以工作。

答案 1 :(得分:0)

Has完全合法。但是,逻辑属于setter或构造函数:决定表示缺失属性的方式(nullstring.Empty,最好是null,但绝对不是两者都有。这使得Has逻辑检查null

支持完全删除Has的一个考虑因素是使用??运算符的可能性。如果您的用例允许您替换

var xyz;
if (x.HasXyz) {
    xyz = h.Xyz;
} else {
    xyz = defaultValueOfXyz;
}

var xyz = h.Xyz ?? defaultValueOfXyz;

然后你可以完全放弃HasXyz