gpt4 book ai didi

c# - 存储库模式 - 验证对象和返回消息

转载 作者:行者123 更新时间:2023-11-30 14:47:36 25 4
gpt4 key购买 nike

我正在一个网站上工作,只是想了解总体结构。我在后台有一个数据库,我正在使用“存储库模式”访问它。我的 UserRepository 类中有以下代码:

public bool IsValid(User user)
{
if (_context.Users.Any(c => c.EmailAddress == user.EmailAddress))
{
Message = "Email address already in use";
return false;
}

return true;
}

这里实现了

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(User user)
{
if (ModelState.IsValid)
{
var context = new Context("DatabaseContext");
var userRepo = new UserRepository(context);

if (userRepo.IsValid(user))
{
userRepo.Add(user);
// return to different view
}
else
{
// display userRepo.Message on page
return View(user);
}
}

return View(user);
}

我的问题是我认为我没有正确地绕过“消息”位,但我无法在网上找到任何可以帮助我的东西(特别是关于存储库)。我认为 我应该将 IsValid 的返回类型更改为类似结果的类型(正如我在对话框中看到的那样),但我还是不确定。

如有任何帮助,我们将不胜感激。

谢谢。

最佳答案

实现此目的的一种方法与您建议的完全相同 - 更改 IsValid 的返回类型。

过去我在我的“业务层”中有类似的验证方法,返回 ValidationResult 的集合,其中每个返回的记录说明模型中的验证错误,并且空集合将是解释为有效模型。

例如:

public class ValidationResult
{
public string FieldName { get; set; }
public string Message { get; set; }
}

public interface IValidator<T>
{
IEnumerable<ValidationResult> IsValid(T model);
}

//...in your implementation
public IEnumerable<ValidationResult> IsValid(User user)
{
//Return a new ValidationResult per validation error
if (_context.Users.Any(c => c.EmailAddress == user.EmailAddress))
{
yield return new ValidationResult
{
Message = "Email address already in use",
FieldName = nameof(user.EmailAddress)
};
}
}

然后这可以由您的表示层解释以反馈给用户。

关于c# - 存储库模式 - 验证对象和返回消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44385239/

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