[英]Which nuGet package for namespace Microsoft.TeamFoundation.Framework.Server
[英]in which namespace / package to put exceptions
构建异常类位置的常见或最佳实践是什么?
假设您有包/名称空间myproject.person
(人员的模型和DAO)和myproject.order
(订单的模型和DAO)以及PersonException
和OrderException
异常。 我应该将异常放在相应的包中,还是在单独的包中用于异常(例如myproject.exceptions
)?
第一种方法似乎更合理(因为它按功能排序)。 但是问题出在哪里你应该放置与两者相关的例外? 例如, ConstraintViolationException
谢谢
根据我的经验,最好将异常放入对该异常有意义的包中。 我不会仅为异常创建一个特殊的包 - 异常应该存在于使用它们的类附近。
执行Java类库的功能。 将异常放在与抛出它们的API类和接口相同的包中。
我会将它们放在与其对应的类相同的命名空间中。 对于更一般的异常类型,您应该尝试将它们放在覆盖使用它们的类的最特定的命名空间中,因此ConstraintViolationException将放在myproject命名空间中。
如果异常仅用于一个类或functuionality类的类,则将它放在它们附近。 如果Exception具有应用程序jr库的通用含义,请将其放在其oun名称空间中。 恕我直言
想象一下,每个程序集都有自己的操作,以及许多类型的异常(不仅仅是PersonException或OrderException ,而是PersonInvalidDataException或PersonDataPersistException )。 例如,这些异常可以实现BaseException,即记录和发送电子邮件。
所以更实惠的方式(在我看来)是通过名称空间将它们分开。
我只是将所有异常保留在项目命名空间(即myproject)中。 如果你为每个类创建一个文件,它们可以在项目视图中占用空间,所以我通常调用文件(例外).cs以使它们出现在顶部,并将所有的例外放在一个地方。
如果它是一个大项目,那么通常会将程序集分解为不同的名称空间,并且每个名称空间将获得自己的一组异常,但我们正在讨论每个程序集超过100个类。
我对整个想法的问题是,异常通常应该根据可能出错的方式设计,例如NullPointerException
,而PersonException
似乎引用任何灾难正在展开的对象,而不提供任何进展的线索错误。 Person对象是否导致异常? 是因为Person有内部逻辑问题,还是因为其中一个方法提供了错误的参数? 或者由于数据库中没有找到人员而导致异常?
关于两个对象的异常,你在两个方面的想法只会加强我的担忧。 我建议重新考虑你的异常设计(EntityNotFoundException,BadArgumentException,MinorCannotOrderPornException),你的困境的答案有望更加明显。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.