繁体   English   中英

代码合同,确保不引发任何异常

[英]Code Contract and ensuring no exceptions are thrown

我想知道我是否能够使用Microsoft代码合同来验证方法不会引发任何异常的不变性。 用例如下:我有一个带有记录器的导入器,该导入器使用一个用于导入器的基类来定义导入的各个阶段:

  • 读取文件;
  • 将数据存储到通用数据记录中;
  • 根据记录创建域对象;
  • 在项目上下文中验证域对象;
  • 将有效的域对象放入项目中。

每个阶段都由该导入器基类的抽象方法表示。 我想确保每个阶段不变,不会抛出任何已记录的异常。 因此,“读取文件”阶段应处理所有与文件访问有关的问题(例如DirectoryNotFoundException ),使用记录器记录问题并返回null。

本质上,我们希望通过记录器解决问题。 然后根据问题的严重性,中止导入,然后继续忽略问题。

我已经快速阅读了该手册 ,但没有发现任何似乎有用的内容。 有可能吗? 还是不可能,实际上有一个很好的原因使我失踪了?

我认为不可能验证它没有引发任何异常,因为异常可以源自运行时本身。 考虑使用OutOfMemoryException或StackOverflowException。

实际上,我认为这就是通常情况下很难执行的原因-如果正确使用异常,则异常通常是由程序的外部输入引起的,因此无法进行验证。

(如果异常是由程序中的错误引起的,那么您可能可以使用前提条件来捕获该异常)

实际上,考虑一下,已经有一种编译器支持的方法来验证是否引发或处理了异常……只是不在.NET:D中。 Java的经过检查的异常似乎可以满足您的用例,但是即使Java自己的社区似乎也认为它们在当今是一个坏主意。

暂无
暂无

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

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