【问题标题】:Validating boolean properties验证布尔属性
【发布时间】:2012-02-15 12:50:22
【问题描述】:

我有点不好意思问这个问题。似乎无法在其他任何地方找到它的描述...

比如说,我们有一个 Web 服务方法 StoreNewItem(Item item),它接收包含该项目所有属性的数据契约。 我们将在数据库中插入这个新项目。 有些属性是强制性的,有些是布尔值。

我们应该验证传入的数据,即验证必填字段是否确实具有有效数据,还是应该由调用 Web 服务的客户端负责?

如果是,如何处理布尔属性?客户端很可能会忽略它们,它们将在 db 中存储为 false,因为我们无法知道它们是在哪里设置为 false 还是被客户端忽略/忘记了。

使用具有 True、False 和 Empty 的枚举而不是 bool 作为这些强制属性的类型是否有效? 或者这根本不是我们的问题?

欢迎所有想法!

【问题讨论】:

  • 感谢您的回答!让他们放心:-)

标签: c# validation properties boolean


【解决方案1】:

您可以使用 Web 服务完全支持的可为空的布尔值 (bool?) 来代替枚举。

恕我直言,您的检查逻辑至少应该在可以将错误转发到服务层的数据库中(这反过来应该引发故障)。我也会在服务级别使用它,以便在访问数据库之前引发错误(验证也是业务层的一部分)。将它放在 UI 中也很好,但不是强制性的。

永远不要假设您的客户会向您发送有效数据。

【讨论】:

    【解决方案2】:

    明确验证数据。恶意实体可以轻松复制您的客户。

    【讨论】:

      【解决方案3】:

      这取决于您的业务规则。

      如果你想让用户不传递一些参数但你希望它们有一个默认值,你可以使用可选参数

      void MyServiceMethod(bool CanDoIt=false,int somethingElse)
      

      或者,如果您希望允许用户不使用空值传递所有参数(如果您的业务规则允许),您可以让您的服务获得可空值

      void MyServiceMethod(Nullable<bool> canDoItfalse,int somethingElse)
      

      一般来说,您应该始终在服务端验证数据,并在验证失败的情况下返回服务故障数据合同

      更多信息在

      http://msdn.microsoft.com/en-us/library/ms752208.aspx

      【讨论】:

        【解决方案4】:

        如果没有外部第三方将访问 Web 服务(仅在内部使用),您可以避免在服务中进行验证。就个人而言,我不会那样做。将不良数据发送到服务太容易了。另外,您将不得不在所有客户端上复制所有验证逻辑。所以在我看来,在服务中进行验证是必须的。

        就布尔值而言,您可以使用可为空的布尔值 (bool?)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-03
          • 2016-04-24
          • 2016-03-13
          • 1970-01-01
          • 1970-01-01
          • 2021-12-06
          • 1970-01-01
          • 2019-09-14
          相关资源
          最近更新 更多