gpt4 book ai didi

c# - 构建验证服务层

转载 作者:太空宇宙 更新时间:2023-11-03 16:37:24 26 4
gpt4 key购买 nike

<分区>

我正在寻找有关如何构建验证服务层的教程。我希望该层出现在我的“域”程序集中。目前我已经有了我的域模型和(也许不是最好的)通用存储库实现。

接下来是我的存储库实现:

public sealed class Repository<T> : Interface.IRepository<T> where T : Entity<T>
{
private ISessionFactory sessionFactory;

public Repository(ISessionFactory sessionFactory)
{
this.sessionFactory = sessionFactory;
}

public T Get(Guid id)
{
using(var session = this.sessionFactory.OpenSession())
{
return session.Get<T>(id);
}
}
public IQueryable<T> Get(Expression<Func<T, Boolean>> predicate)
{
using(var session = this.sessionFactory.OpenSession())
{
return session.Query<T>().Where(predicate);
}
}
public IQueryable<T> All()
{
using(var session = this.sessionFactory.OpenSession())
{
return session.Query<T>();
}
}
public void Add(T entity)
{
// execute validation here?

using(var session = this.sessionFactory.OpenSession())
using(var transaction = session.BeginTransaction())
{
session.Save(entity);
transaction.Commit();
}
}
public void Remove(T entity)
{
using(var session = this.sessionFactory.OpenSession())
using(var transaction = session.BeginTransaction())
{
session.Delete(entity);
transaction.Commit();
}
}
public void Update(T entity)
{
// make changes &
// execute validation here?

using(var session = this.sessionFactory.OpenSession())
using(var transaction = session.BeginTransaction())
{
session.Update(entity);
transaction.Commit();
}
}
}

我想使用 FluentValidation验证实体。据我所知,在存储库的范围内,只有两个地方应该进行验证:添加和更新实体时。

首先我想到了 IValidator<T>作为基本实体类的参数:

public abstract class Entity<T> where T : Entity<T>
{
// ...
public virtual String ValidationMessage
{
get;
private set;
}

public virtual Boolean Validate(IValidator<T> validator)
{
try
{
validator.ValidateAndThrow(this as T);
return true;
}
catch(ValidationException ex)
{
this.ValidationMessage = ex.Message;
return false;
}
}
// ...
}

但好像不太对。

如何从设计的角度做到这一点?任何建议或教程表示赞赏。

谢谢!

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com