构建异常类位置的常见或最佳做法是什么?
假设您有包/名称空间myproject.person
(人员的模型和DAO)和myproject.order
(订单的模型和DAO)以及例外PersonException
和OrderException
。我应该将异常放在相应的包中,还是放在单独的包中以用于例外(例如myproject.exceptions
)?
第一种方法似乎更合理(因为它按功能排序)。但是问题出在哪里你应该放置与两者相关的例外?例如一个ConstraintViolationException
由于
答案 0 :(得分:12)
根据我的经验,最好将异常放入对该异常有意义的包中。我不会仅为异常创建一个特殊的包 - 异常应该存在于使用它们的类附近。
答案 1 :(得分:12)
执行Java类库的功能。将异常放在与抛出它们的API类和接口相同的包中。
答案 2 :(得分:8)
我会将它们放在与其对应的类相同的命名空间中。对于更常见的异常类型,您应该尝试将它们放在覆盖使用它们的类的最特定的命名空间中,因此ConstraintViolationException将放在myproject命名空间中。
答案 3 :(得分:1)
如果异常仅用于一个类或功能组的类,则将它放在它们附近。如果Exception具有应用程序jr库的通用含义,请将其放在其oun名称空间中。 IMHO
答案 4 :(得分:1)
想象一下,每个程序集都有自己的操作,以及许多类型的异常(不仅仅是 PersonException 或 OrderException ,而是 PersonInvalidDataException 或 PersonDataPersistException 强>)。 例如,这些异常可以实现BaseException,即记录和发送电子邮件。
所以更实惠的方式(在我看来)是用名称空间分隔它们。
答案 5 :(得分:0)
我只保留项目命名空间中的所有异常(即myproject)。如果你为每个类创建一个文件,它们可以占用项目视图中的空间,所以我通常调用文件(例外).cs以便它们出现在顶部,并将所有的例外放在一个地方。
如果它是一个大项目,那么通常会将程序集分解为不同的名称空间,每个名称空间将获得自己的一组异常,但我们每个程序集都会讨论100多个类。
答案 6 :(得分:0)
我对整个想法的问题是,异常通常应该根据可能出错的方式设计,例如NullPointerException
,而PersonException
似乎是指任何涉及的对象灾难正在展开而没有提供出错的线索。 Person对象是否导致异常?是因为Person有内部逻辑问题,还是因为其中一个方法提供了错误的参数?或者由于在数据库中找不到人员而导致例外?
你对这两个对象的例外情况有两种看法,这只会加强我的担忧。我建议重新考虑你的异常设计(EntityNotFoundException,BadArgumentException,MinorCannotOrderPornException),你的困境的答案有望更明显。