在域模型,当你有一个实现验证方法和模型类在这个方法要添加BrokenRules为BusinessRule对象和他们都有一个属性和规则的消息,是什么是本地化这些消息的最佳方式?领域模型的验证消息本地化 - .NET
回答
破碎规则/验证实体的
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var validationResults = new List<ValidationResult>();
//-->Check first name property
if (String.IsNullOrWhiteSpace(this.FirstName))
{
validationResults.Add(new ValidationResult(Messages.validation_CustomerFirstNameCannotBeNull,
new string[] { "FirstName" }));
}
//-->Check last name property
if (String.IsNullOrWhiteSpace(this.LastName))
{
validationResults.Add(new ValidationResult(Messages.validation_CustomerLastNameCannotBeBull,
new string[] { "LastName" }));
}
return validationResults;
}
你可以让你的实体实施IValidatableObject。这是System.ComponentModel.DataAnnotations的一部分。 你仍然可以看到resx文件可以这样使用。或者你只是在应用程序启动时读取的xml文件中创建自己的静态包装。
在我看来本地化属于UI。事实上,你甚至有这个问题可能表明你overgeneralized你的模型,并引入了像Validate和BusinessRule这样的概念。现在,演示文稿涉及到您的域代码的“流血”。如果您使用的通用语言代码看起来更像
bool isDelinquent = order.IsDelinquent();
哪里域显然是不负责UI的关注,如用户友好和本地化的消息。相反,您可能有以下几条:
List<BusinessRule> brokenRules = order.Validate(){
...
brokenRule = new BusinessRule("Sorry this is order is delinquent");
// what if I want this message in Italian?
// would this even fit into error text box?
// should delinquency unit test rely on 'magic string' error message?
...
}
您遇到的问题是您的域代码可能不会在用户界面附近运行。这就是说,如果代码是一个服务器(例如消息总线端点)上运行则任何异常成为业务过程的一部分。
对于所做的任何事情运行前端语言的知识我会建议资源文件。他们真的会是最简单的。
除此之外特定的异常或某些编码/检索系统可能会被要求,
您可以绝对有域的邮件。但它们应该是特定于域的,并告诉客户什么是错误的或什么是无效的(通常是响应客户端的错误和验证消息)。 看的最好的DDD的例子在那里一个http://msdn.microsoft.com/es-es/architecture/gg189193
他们使用的邮件域,如:
throw new InvalidOperationException(Messages.exception_BankAccountCannotDeposit);
或
originAccount.WithdrawMoney(amount, string.Format(Messages.messages_TransactionFromMessage, destinationAccount.Id));
正如你可以看到你可以域项目中使用的resx文件并利用它们像异常和其他业务信息存储邮件回客户端
希望这有助于你。 干杯
... sry忘记了破碎的规则部分。你可以这样做:在下面我的第二个答案 –
- 1. Django的 - 变化领域的验证消息
- 2. 本地化来自域对象(实体)的验证消息
- 3. 相关领域的Django模型验证
- 4. 如何本地化Bean验证消息
- 5. 本地化MVC3验证消息
- 6. 本地化asp.net webforms验证消息
- 7. .NET领域模型验证和好友类
- 8. 验证form_tag没有领域从模型在领域
- 9. 验证领域
- 10. 验证领域
- 11. 验证领域
- 12. 验证领域
- 13. 验证领域
- 14. 验证每个领域的变化领域类
- 15. 验证域模型
- 16. 域模型验证?
- 17. ASP .NET MVC 3:修改验证脚本和全球化消息
- 18. 验证失败时的消息的JSR验证API中的本地化支持
- 19. MVC 2模型验证消息
- 20. REST服务消费,领域模型
- 21. 如何本地化我的WTForms验证消息?
- 22. Fluent验证中的本地化消息(MVC3)
- 23. 可本地化的表单验证消息
- 24. 本地化来自XDocument.Validate()的验证消息
- 25. ServiceStack RegistrationFeature和本地化的验证消息
- 26. Hibernate验证和本地化的错误消息?
- 27. ASP.NET MVC 3 - 不要使用本地化的验证消息
- 28. 验证消息文化
- 29. 猫鼬模式验证XOR领域
- 30. Rails的验证领域
是的,这正是我。我很惊讶这种方法在许多书中被提到,称为DDD。我现在没有时间阅读埃文斯先生的书,但我肯定会。你是否知道.NET中的任何示例项目都能正确实现这些概念?谢谢 – elector
我会接受这个作为一个答案,如果你能描述一个非常非常简单的解决方案...谢谢你。 – elector
解决方案是在UI层中保留所有的演示问题(包括显示给用户的消息)。我的主要观点是,如果您不让域对象进入“无效”状态,问题可能会消失。问题是'无效'这个词是非常普遍的,并且与情境有关。我知道这听起来令人困惑,但你应该尝试用域不变量和无处不在的语言来思考。 http://codebetter.com/gregyoung/2009/05/22/always-valid/ – Dmitry