通过性能验证实现一个基本的问题? 请指引我

感谢您的关注和时间。

我想要实现的特性settter验证。 这里是你的专家帮助需要请一个问题。

我有我怎么会做的设定值之前,验证想法。 但没有得到什么做的,如果传递的值是不正确的。 因为我想返回相应的消息给用户(在Web表单标签)只是不设置是不是一个可以接受的解决办法。 我的示例代码:

private int id; public int Id { get { return id; } set { bool result = IsNumber(value); if (result==false) { // What to do if passed data is not valid ? how to give a appropriate message to user that what is wrong ? } id = value; } }

一个想法是使用回报,但它是不允许的。

投掷错误是不是好,因为一般我们避免thorwing自​​定义错误。

请引导和帮助我。

由于预期

haan​​si

--------------解决方案-------------

你可以考虑从属性setter抛出相应的异常。 这样,就可以清楚地主叫哪里出了问题,特别是假设你有业务规则相对于设置属性。 当然,你期望调用者来完成验证,如果仍然有问题,然后抛出异常似乎并不那么糟糕。

“这是有效的和可接受的从属性的setter抛出异常。” 物业设计指南

最佳实践:从性能抛出异常

有什么例外,从属性的setter抛出?

我想你最好改变为另一个例子,因为:

public int Id
{
get { ... }
set
{
if (!IsNumer(value)) // changes to if (value>5)
{
//the code here will never be executed
id = value;
}
}
}

  1. 如果检查只约数(类型),那么你的财产能很好的处理类型安全。 例如。 用户将无法指定字符串属性接受INT。
  2. 我建议,如果物业涉及certaing计算,那么应该考虑使用一种方法来代替。 在这种情况下,你会选择换来一些文字。
  3. 还有一个选择是将存储在一个实例集合中的所有这些验证检查(同一个对象中)。 喜欢。

    私有列表_faileValdations;

//更多的代码

set
{
if (!IsNumber(value))
{
_faileValdations.Add("Invalid value for xxx. Expected... got..");
}
else{
id = value;
}
}

然后,你的GUI可以阅读FailedValidations收集到了最后,并在一些标签的格式化的方式显示出来。

编辑:下面多了一个选择。

  1. 抱歉,我忘了之前提到这一点。

您可以使用事件驱动的方法也。 你对象可以揭露事件,如“ValidationFailed”,和所有的GUI对象可以订阅该事件。 该对象将触发此事件在任何情况下,验证失败的制定者。

set {
if (!IsNumber(value))
{
RaiseValidationFailed("some message");
}
else{
id = value;
}
}

“RaiseValidationFailed”可以收集信息,把它包在一些事件参数和触发“ValidationFailed”事件的消息。 然后GUI可以反应这一点。 {我如果不明确规定你为这个完整的代码}

我认为,你应该重新考虑你的方法来验证。 你所提出的建议,每次一个属性发生变化,会生成一个消息表示方法。

如何将这些信息进行收集,存储和呈现的? 特别是如果你决定使用你的类的网站?

如果您想验证你的类在其他任何时候怎么办?

如果你想使用在客户端验证相同的规则?

我可以理解尽早捕获无效值的吸引力,但它是一个更容易验证一个电话一整类,如validate()方法。 通过这种方式,您可以完全控制验证逻辑运行时结束。

我建议你​​阅读上的两个主要途径属性验证:

数据Anotations

流利的验证> NET 3.0及以上

流利的验证.NET 2.0

两个数据注解和FluentValidation很容易使用,他们能够产生Web表单上的良好测试客户端验证,赢得形式。

在数据注释,验证被添加到使用属性的属性。 如果你喜欢,让您的数据类清洁数据传输对象,流利的验证涉及到创建的验证器类易于阅读的规则。

分类:C# 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.719 (s). 10 q(s)