【发布时间】:2011-10-27 11:45:07
【问题描述】:
我有一个使用 CommandService 的 ASP.NET MVC 站点。该命令服务负责执行命令,但在执行命令之前,需要对每个命令进行验证,因此有一个返回 ValidationResult 的 Validate 操作,如下所示(简化):
public class ValidationResult
{
public List<string> ErrorCodes { get; set; }
}
我想改进这一点,因为当前返回的是字符串列表,例如“UserDoesNotExist”或“TitleIsMandatory”,这当然不是最好的方法。
最好返回强类型的东西。但是我该怎么做呢?
选项 1:使用一个大枚举,例如:
public enum ErrorCode { UserDoesNotExist, TitleIsMandatory}
public class ValidationResult
{
public List<ErrorCode> ErrorCodes { get; set; }
}
不知道创建这么大的枚举,把所有的域错误码都放进去是不是个好主意?
选项 2:使用类
public class ErrorCode {}
public class UserDoesNotExist : ErrorCode {}
public class TitleIsMandatory : ErrorCode {}
public class ValidationResult
{
public List<ErrorCode> ErrorCodes { get; set; }
}
更干净,但更难使用?
你会怎么做,还是我错过了其他选择?
【问题讨论】:
-
这是针对 api 还是针对普通的基于视图的项目?我的意思是对于基于视图的项目,您可以使用城堡验证套件,您可以使用 xval 或其他。还是您正在寻找这些示例代码?
-
为我的问题添加了更多上下文。这是一个带有执行验证的命令处理程序的命令服务。我不是在寻找示例代码,而是关于如何返回强类型验证结果的想法。
-
有什么理由不使用内置验证(假设是 mvc3)?已经有一个
ValidationResult类 - msdn.microsoft.com/en-us/library/dd411789%28v=VS.100%29.aspx。 -
我在 MVC 中进行验证,但我说的是与 MVC 无关的 CommandService 中的验证。
-
Lud,
ValidationResult被退回后你在做什么?是否有任何东西返回给客户,或者只是记录下来?我正试图弄清楚您需要返回哪些数据 - 这会影响我的回答(我认为)。
标签: c# asp.net-mvc validation domain-driven-design cqrs