繁体   English   中英

在哪个命名空间/包中放置异常

[英]in which namespace / package to put exceptions

构建异常类位置的常见或最佳实践是什么?

假设您有包/名称空间myproject.person (人员的模型和DAO)和myproject.order (订单的模型和DAO)以及PersonExceptionOrderException异常。 我应该将异常放在相应的包中,还是在单独的包中用于异常(例如myproject.exceptions )?

第一种方法似乎更合理(因为它按功能排序)。 但是问题出在哪里你应该放置与两者相关的例外? 例如, ConstraintViolationException

谢谢

根据我的经验,最好将异常放入对该异常有意义的包中。 我不会仅为异常创建一个特殊的包 - 异常应该存在于使用它们的类附近。

执行Java类库的功能。 将异常放在与抛出它们的API类和接口相同的包中。

我会将它们放在与其对应的类相同的命名空间中。 对于更一般的异常类型,您应该尝试将它们放在覆盖使用它们的类的最特定的命名空间中,因此ConstraintViolationException将放在myproject命名空间中。

如果异常仅用于一个类或functuionality类的类,则将它放在它们附近。 如果Exception具有应用程序jr库的通用含义,请将其放在其oun名称空间中。 恕我直言

想象一下,每个程序集都有自己的操作,以及许多类型的异常(不仅仅是PersonExceptionOrderException ,而是PersonInvalidDataExceptionPersonDataPersistException )。 例如,这些异常可以实现BaseException,即记录和发送电子邮件。

所以更实惠的方式(在我看来)是通过名称空间将它们分开。

我只是将所有异常保留在项目命名空间(即myproject)中。 如果你为每个类创建一个文件,它们可以在项目视图中占用空间,所以我通常调用文件(例外).cs以使它们出现在顶部,并将所有的例外放在一个地方。

如果它是一个大项目,那么通常会将程序集分解为不同的名称空间,并且每个名称空间将获得自己的一组异常,但我们正在讨论每个程序集超过100个类。

我对整个想法的问题是,异常通常应该根据可能出错的方式设计,例如NullPointerException ,而PersonException似乎引用任何灾难正在展开的对象,而不提供任何进展的线索错误。 Person对象是否导致异常? 是因为Person有内部逻辑问题,还是因为其中一个方法提供了错误的参数? 或者由于数据库中没有找到人员而导致异常?

关于两个对象的异常,你在两个方面的想法只会加强我的担忧。 我建议重新考虑你的异常设计(EntityNotFoundException,BadArgumentException,MinorCannotOrderPornException),你的困境的答案有望更加明显。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM