在哪里对对象属性进行值断言

时间:2019-01-05 13:20:31

标签: c# design-patterns

我正在寻找“正确”的位置来对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#属性,但是它们是框架的一部分,我想拥有在这个项目中尽可能少的依赖。

有人可以向我解释这是否是进行这些断言的好方法,为什么?

0 个答案:

没有答案