我正在寻找“正确”的位置来对C#中的对象的值进行断言。到目前为止,我遇到的大多数示例甚至在View中的Service中都执行了这些断言,但是对我来说,在属性设置器中执行此断言似乎更合适。
作为一个例子,我有一个Product实体类,在其中我对设置器中的Null和NullOrWhiteSpace进行了断言。
def save_model(self, request, obj, form, change):
# associating the current logged in user to the client_id
obj.client_id = request.user
super().save_model(request, obj, form, change)
然后将其用于服务中,但是正如我所说,在大多数示例中,我看到我在域模型设置器中所做的断言是在服务中完成的。
public class Product
{
private string _name;
private ProductCategory _category;
public string Name
{
get => _name;
private set
{
Guard.Against.NullOrWhiteSpace(value, nameof(value));
_name = value;
}
}
public string Allergens { get; set; }
public ProductCategory Category
{
get => _category;
set
{
Guard.Against.Null(value, nameof(value));
_category = value;
}
}
public Product(string name, string allergens, ProductCategory category)
{
Name = name;
Allergens = allergens;
Category = category;
}
}
当然,可能还有更多的断言,例如最大字符串长度,电子邮件地址等。我知道我可以使用C#属性,但是它们是框架的一部分,我想拥有在这个项目中尽可能少的依赖。
有人可以向我解释这是否是进行这些断言的好方法,为什么?