Где делать утверждения о значениях свойств объекта - PullRequest
0 голосов
/ 05 января 2019

Я ищу "правильное" место, чтобы сделать утверждения о значениях объекта в C #. Большинство примеров, с которыми я сталкивался до сих пор, делают эти утверждения в Сервисе даже в Представлении, но мне кажется более уместным сделать это в установщике свойств.

В качестве примера у меня есть класс сущностей Product, в котором я делаю утверждения для Null и NullOrWhiteSpace в установщиках.

 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;
        }
    }

Это затем будет использоваться в службе, но, как я уже сказал, в большинстве примеров я вижу, что утверждения, которые я делаю в установщиках модели домена, выполняются в службе.

public class ProductService : IProductService
{
    private readonly IAsyncRepository<Product> _productRepository;
    private readonly IAsyncRepository<ProductCategory> _productCategoryRepository;

    public ProductService(
        IAsyncRepository<Product> productRepository,
        IAsyncRepository<ProductCategory> productCategoryRepository)
    {
        _productRepository = productRepository;
        _productCategoryRepository = productCategoryRepository;
    }

    public async Task CreateProductAsync(string name, string allergens, int productCategoryId)
    {
        var category = await _productCategoryRepository.FindByIdAsync(productCategoryId);

        var product = new Product(name, allergens, category);
        await _productRepository.AddAsync(product);
    }
}

Конечно, может быть гораздо больше утверждений, таких как максимальная длина строки, адрес электронной почты и т. Д. Я знаю, что есть атрибуты C #, которые я мог бы использовать, но они являются частью фреймворков, и я хочу иметь как можно меньше зависимостей в этом проекте.

Может ли кто-нибудь объяснить мне, будет ли это хорошим способом сделать эти утверждения и почему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...