我会将验证保留在实体级别。在这里您可以检查是否设置了所需的属性,它们的值是否正确,您还可以比较实体上的属性。这确保了实体,无论其他实体如何,都处于有效状态。
在服务层中,您可以通过调用 Validate 方法来验证传递给该方法的任何实体,您还可以与数据库中的实体进行比较。
在验证 ID 是否唯一的实例中,您可以在存储库中添加一个名为 GetById 的方法,通过该方法您传入要检查的实体的 ID,如果它返回 NULL,则您没有找到具有该 ID 的实体因此它是独一无二的。
例如:
public class MyRepository
{
public MyEntity GetById(int id)
{
return _entitySet.FirstOrDefault( item => item.Id == id );
}
}
public class MyService
{
public void ServiceMethod(Entity entity)
{
if( _repository.GetById( entity.Id ) == null)
{
// entity.Id is unique!
}
else
{
// entity.Id is not unique!
}
}
}
您的每个存储库都可以访问被管理的实体,例如实体框架中的 ObjectSet(我认为它被称为),因此您可以安全地将任何共享验证(在特定实体的上下文中)放在存储库上。
例如:
public class MyRespository
{
public bool IsIdUnique(int id)
{
Entity entity = _entitySet.FirstOrDefault( item => item.Id == id );
return entity == null ? true : false;
}
}
public class MyService
{
public void ServiceMethod(Entity entity)
{
if( _repository.IsIdUnqiue(entity.Id) )
{
// entity.Id is unique!
}
else
{
// entity.Id is not unique!
}
}
}
您还可以将 GetById 添加到上面的 MyService 类中,并调用 IsIdUnique 方法,而不是重新键入 lambda。这样您就可以重用 GetById 逻辑。