抛出异常是个好习惯吗?

用户名

考虑一个示例,其中用户使用两个aspx页面中的表单为客户对象输入值。使用第一种方法时,两个aspx页面都需要在调用构造函数之前先验证ID大于0,并且FirstName不为空。使用第二个选项,两个页面都可以调用Validate函数,并向用户显示错误消息。

基于以上示例,我更喜欢第二种选择。但是,当我在网络上进行研究时,我不断看到它是面向对象的,可以立即引发异常,而不是让对象接受无效数据。就像我前面提到的例外一样,每个调用此构造函数的页面都需要验证输入是否有效。我不喜欢重复逻辑,所以我更喜欢第二种选择。

就域驱动设计而言,首选的选项是什么?

选项1

public class Customer{

   public int ID { get; set; }
   public string FirstName { get; set; }

   public Customer(int ID, string FirstName){
      if (ID < 0)
          throw new Exception("ID cannot be less than 0");
      if (string.IsNullOrEmpty(FirstName))
          throw new Exception("First Name cannot be empty");

      this.ID = ID;
      this.FirstName = FirstName;
   }
}

选项2

public class Customer{

   public int ID { get; set; }
   public string FirstName { get; set; }

   public Customer(int ID, string FirstName){

      this.ID = ID;
      this.FirstName = FirstName;

   }

    public List<string> Validate(){
        List<string> ErrorMessages = new List<string>();

        if (ID < 0)
            ErrorMessages.Add("ID cannot be less than 0");
        if (string.IsNullOrEmpty(FirstName))
            ErrorMessages.Add("First Name cannot be empty");

        return ErrorMessages;
    }

}
毛里斯

我相信这个问题已经在其他地方得到了回答。但是,这里还有一些其他链接可供阅读:

在“实用程序员”一书中,与使用例外有关的最大问题是“什么是例外?”。

在该部分中,我引用:

...异常应该很少用作程序正常流程的一部分;应该为意外事件保留异常。

尽管在您的情况下是否使用异常是有争议的,但我会说不-因为您可能需要捕获一个请求中所有可能的输入错误,并在表单上反映出来,以便用户更正这些值。

现在我想起来了,是的,您应该在这里使用异常。这就是防御性编码的方式如果您已经期望将有效的参数传递给Customer该类,则该代码应引发异常,以防止对该类的无效使用(例如,例如,由另一个程序员使用)。在这种情况下,您应该有另一个输入验证器,以在到达Customer之前验证用户对应用程序的输入

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从DAO层向控制器抛出异常是一种好习惯吗?

来自分类Dev

在API中对参数验证抛出异常是否被认为是一种好习惯?

来自分类Dev

将异常抛出到Java的setter中是一种好习惯吗?

来自分类Dev

抛出异常是合法的else声明吗?

来自分类Dev

拆分CSS是个好习惯吗?

来自分类Dev

处理所有可能的(未经检查的)异常是否是好习惯?

来自分类Dev

这是好习惯吗?

来自分类Dev

“包装”异常是个好主意吗?

来自分类Dev

使用WebView代替Textview是个好习惯吗?

来自分类Dev

传递Ninject内核是一个好习惯吗?

来自分类Dev

Object.create({}):这是一个好习惯吗?

来自分类Dev

使用`import __main__`是一个好习惯吗?

来自分类Dev

Android:静态获取Context是一个好习惯吗?

来自分类Dev

缓存Fragment是一个好习惯吗?

来自分类Dev

Spring在方法上的@Profile是一个好习惯吗

来自分类Dev

Android注释-这是一个好习惯吗?

来自分类Dev

在vuejs中使用CDN是一个好习惯吗?

来自分类Dev

使用WebView代替Textview是个好习惯吗?

来自分类Dev

卸载依赖项。这是一个好习惯吗?

来自分类Dev

使用别名是一个好习惯吗?

来自分类Dev

拥有大量 childEventListeners 是一个好习惯吗?

来自分类Dev

使用 mb_convert_encoding 函数是个好习惯吗

来自分类Dev

'+ ((visible && "is-active") || "")' 是一个好习惯吗?

来自分类Dev

在异常构造函数中记录错误是一种好习惯吗?

来自分类Dev

在C#中缓存异常实例是一种好习惯吗

来自分类Dev

在异常构造函数中参数化错误消息是一种好习惯吗?

来自分类Dev

捕获异常后关闭SQL连接是一种好习惯吗?

来自分类Dev

在异常构造函数中参数化错误消息是一种好习惯吗?

来自分类Dev

在我的AppDelegate中保留一个CLLocationManager是一个好习惯吗?

Related 相关文章

  1. 1

    从DAO层向控制器抛出异常是一种好习惯吗?

  2. 2

    在API中对参数验证抛出异常是否被认为是一种好习惯?

  3. 3

    将异常抛出到Java的setter中是一种好习惯吗?

  4. 4

    抛出异常是合法的else声明吗?

  5. 5

    拆分CSS是个好习惯吗?

  6. 6

    处理所有可能的(未经检查的)异常是否是好习惯?

  7. 7

    这是好习惯吗?

  8. 8

    “包装”异常是个好主意吗?

  9. 9

    使用WebView代替Textview是个好习惯吗?

  10. 10

    传递Ninject内核是一个好习惯吗?

  11. 11

    Object.create({}):这是一个好习惯吗?

  12. 12

    使用`import __main__`是一个好习惯吗?

  13. 13

    Android:静态获取Context是一个好习惯吗?

  14. 14

    缓存Fragment是一个好习惯吗?

  15. 15

    Spring在方法上的@Profile是一个好习惯吗

  16. 16

    Android注释-这是一个好习惯吗?

  17. 17

    在vuejs中使用CDN是一个好习惯吗?

  18. 18

    使用WebView代替Textview是个好习惯吗?

  19. 19

    卸载依赖项。这是一个好习惯吗?

  20. 20

    使用别名是一个好习惯吗?

  21. 21

    拥有大量 childEventListeners 是一个好习惯吗?

  22. 22

    使用 mb_convert_encoding 函数是个好习惯吗

  23. 23

    '+ ((visible && "is-active") || "")' 是一个好习惯吗?

  24. 24

    在异常构造函数中记录错误是一种好习惯吗?

  25. 25

    在C#中缓存异常实例是一种好习惯吗

  26. 26

    在异常构造函数中参数化错误消息是一种好习惯吗?

  27. 27

    捕获异常后关闭SQL连接是一种好习惯吗?

  28. 28

    在异常构造函数中参数化错误消息是一种好习惯吗?

  29. 29

    在我的AppDelegate中保留一个CLLocationManager是一个好习惯吗?

热门标签

归档