Я ищу "правильное" место, чтобы сделать утверждения о значениях объекта в 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 #, которые я мог бы использовать, но они являются частью фреймворков, и я хочу иметь как можно меньше зависимостей в этом проекте.
Может ли кто-нибудь объяснить мне, будет ли это хорошим способом сделать эти утверждения и почему?