在域模型,當你有一個實現驗證方法和模型類在這個方法要添加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