我正在尝试一些事情,下面是详细信息:
我已经使用IValidatableObject实现了域类,因此域可以自行验证。我认为这是一种很好的做法,以确保对象在提交到持久状态之前是有效的,包括所需的任何依赖实体。
我想要做的是创建一个具有通用实现的通用存储库,代码如下:
public class Repository<T> : IRepository<T> where T : IValidatableObject
{
public int Save(T obj)
{
var validationResult = obj.Validate(new ValidationContext(this, null, null)).ToList();
if (validationResult.Any())
{
var inner = new StringBuilder();
foreach (var result in validationResult)
{
inner.Append(result.ErrorMessage + $"\n\r");
}
throw new ValidationException("Not all validation rules passed, please see inner exception for more detail", new Exception(inner.ToString()));
}
//if we reach here then, all validations have passed
return 0;
}
}
此IRepository未由任何其他域类实现,并且尚未构建业务层。
我想要做的是当调用Save(T obj)时它应该在“obj”上运行验证。
这是正确的方法吗?
我想这样做,明天,实施可以通过DI轻松改变。
此外,业务类必须初始化IRepository(DI),这意味着只有在业务层和其他地方才能进行更改。