2
我正在尝试使用xVal来验证新用户的注册。当试图实现检查新用户正在尝试注册的用户名是否已被使用的逻辑时,我遇到了一个嗡嗡声。我似乎无法找到一种方法来实现这一点,而不会让我的User实体依赖于我的UsersRepository。这是我需要找到一种方法,在我的用户实体来实现方法:如何验证需要访问xVal中的存储库的属性?
public IEnumerable<ErrorInfo> ValidateUniqueUserName(string username)
{
if(usersRepository.Users.Exists(m => (m.UserName == username)))
yield return new ErrorInfo("UserName", "User name already exists");
}
我如何能继续使用XVAL这个场景,让我的用户实体从我UsersRepository脱钩任何想法?
是的,我想我需要做一些研究并在这里实现一个纯粹的DDD方法。我不确定您是否熟悉xVal,但根据xVal示例,上述代码实际上驻留在User类中。我想过将验证功能移到存储库(没有服务层),但是我的存储库变得非常复杂。这听起来像我需要一个良好的服务层,但我不知道从哪里开始 – 2009-12-13 03:57:57
我应该清楚:我也在我的asp.net-mvc项目中使用xVal,但只是为了'IDataErrorInfo'所需的索引器返回错误接口。我会假设你做同样的事情。用我上面的例子,我已经删除了对xVal库的需求,因为我自己的代码本身返回错误。研究上面链接的SO问题。我的验证码也存在于实体类中(我应该相信它,而不是服务中)。 – 2009-12-13 05:18:08
看到的是,当我发现我使用的xVal代码有多少时,我意识到我并不需要它。我使用的唯一代码是我认为你使用的'ErrorInfo'类。所有你需要做的就是让你的实体类正确地实现'IDataErrorInfo',MVC将会理解如何验证。这真的很容易。我的代码示例显示如何 - http://stackoverflow.com/questions/1721327/validate-object-based-on-external-factors-ie-data-store-uniqueness/1741831#1741831 – 2009-12-13 05:21:28