是';拥有';房地产良好实践

本文关键字:拥有 房地产 | 更新日期: 2023-09-27 18:01:16

有时在我的模型中,我只实现get‘Has’属性(例如HasDescription(,这样我就可以使用if (model.HasDescription) { ... }从模型外部轻松检查属性的有效性。

实现可能看起来像:

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

这种做法好吗?更具体地说,如果我采取这种方法,我应该把这种条件逻辑转移到其他地方吗?也许是扩展方法?

是';拥有';房地产良好实践

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

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

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

有利于完全放弃Has的一个考虑因素是使用??运算符的可能性。如果您的用例允许您更换

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

带有

var xyz = h.Xyz ?? defaultValueOfXyz;

那么您可以完全放弃CCD_ 11。