10.10 走得太远
只有在模块外不需要异常信息的情况下,在模块内定义掉异常,或者屏蔽掉异常,才有意义。本章中的例子也是如此,比如 Tcl 的 unset
命令和 Java 的 substring
方法;在极少数情况下,如果调用者关心异常所检测到的特殊情况,那么还有其他方法可以获得这些信息。
然而,这个想法有可能走得太远。在一个网络通信的模块中,一个学生小组掩盖了所有的网络异常:如果发生了网络错误,模块会捕捉到它,丢弃它,然后继续,就像没有问题一样。这意味着使用该模块的应用程序没有办法发现信息是否丢失或对端服务器是否失效;没有这些信息,就不可能建立强大的应用程序。在这种情况下,模块必须暴露异常,尽管它们增加了模块接口的复杂性。
对于异常,就像软件设计中的许多其他领域一样,你必须确定什么是重要的,什么是不重要的。不重要的东西应该被隐藏起来,而且越多越好。但是,当某些东西很重要时,它必须被暴露出来。
Last updated