gpt4 book ai didi

asp.net-mvc - View 模型最佳实践中的 ASP.NET MVC 自定义验证

转载 作者:行者123 更新时间:2023-12-04 21:20:32 26 4
gpt4 key购买 nike

我正在尝试将域驱动设计与测试驱动开发的组合用于我在 ASP.NET MVC 3 中构建的这个应用程序。我的架构设置有存储库、域模型、 View 模型、 Controller 和 View 。所有验证都将在 View 模型中处理。我将 View 模型设置为从“IValidatableObject”继承,以便在我的 Controller 方法调用“ModelState.IsValid”时执行我在“Validate”方法中设置的验证属性和自定义验证。我遇到的问题是在我的 View 模型的 Validate 方法中访问我的存储库。我需要访问存储库以检查数据库中的重复记录。似乎最好的主意是创建一个 IRepository 类型的属性,并通过将我的存储库注入(inject)到 View 模型的构造函数中来设置该属性。例如:

public class UserViewModel : IValidatableObject
{
public UserViewModel(User user, IUserRepository userRepository)
{
FirstName = user.FirstName;
LastName = user.LastName;
UserRepository = userRepository;
UserName = user.UserName;
}
public string UserName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public IUserRepository UserRepository { get; set; }
public IEnumerable<ValidationResult> Validate()
{
UserCriteria criteria = new UserCriteria { UserName = this.UserName };
IList<User> users = UserRepository.SearchUsers(criteria);

if (users != null && users.count() > 0)
{
yield return new ValidationResult("User with username " + this.UserName + " already exists."
}
}
}

大家觉得这是个好主意吗?

最佳答案

这已经足够了,但如果我是你,我会用

...
private readonly Func<IUserRepository> userRepositoryFactory;
...
public IEnumerable<ValidationResult> Validate()
{
UserCriteria criteria = new UserCriteria { UserName = this.UserName };
using(var UserRepository = userRepositoryFactory())
{
IList<User> users = UserRepository.SearchUsers(criteria);

if (users != null && users.count() > 0)
{
yield return new ValidationResult("User with username " + this.UserName + " already exists."
}
}
}

关于asp.net-mvc - View 模型最佳实践中的 ASP.NET MVC 自定义验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12645574/

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