编程是关于工作的
我认为回答此问题的最简单方法是了解OOP多年来取得的进展。在OOP中完成的所有工作(以及大多数编程范例)都是围绕需要完成的工作建模的。
每次调用方法时,调用者都会说:“我不知道如何进行这项工作,但是您知道如何做,所以您可以为我做。”
这带来了一个困难:当被调用的方法通常知道如何完成工作但又并非总是知道如何做时,会发生什么?我们需要一种交流的方式:“我确实想为您提供帮助,但我做不到。”
传达此问题的早期方法是简单地返回“垃圾”值。也许您期望一个正整数,所以被调用的方法返回一个负数。完成此操作的另一种方法是在某个位置设置错误值。不幸的是,这两种方法都使样板让我在这里检查以确保所有的原始代码。随着事情变得越来越复杂,该系统崩溃了。
出色的类比
假设您有一个木匠,一个水管工和一个电工。您想用水管工修理水槽,所以他来看看。如果他只告诉您“对不起,我无法解决。它已损坏。”这不是很有用。地狱,如果他看一眼,离开,然后给你寄一封信说他无法解决这个问题,那就更糟了。现在,您必须检查您的邮件,然后才能知道他没有执行您想要的操作。
您更希望他告诉您:“看,我无法修复它,因为您好像泵不工作。”
有了这些信息,您就可以得出结论,希望电工来解决问题。也许电工会找到与木匠有关的东西,而您需要让木匠对其进行修复。
哎呀,您甚至可能都不知道需要电工,您可能也不知道需要谁。您只是家庭维修业务的中层管理人员,而您的关注点正在不断扩大。因此,您告诉您是问题的老板,然后他告诉电工将其解决。
这就是例外建模:分离的复杂故障模式。水管工不需要了解电工-他甚至不需要知道链上有人可以解决问题。他只是报告遇到的问题。
那么...反模式?
好的,因此了解异常点是第一步。接下来是了解什么是反模式。
要获得反模式的资格,它需要
第一点很容易理解-系统正常工作,对吧?
第二点是粘性。将异常用作常规控制流的主要原因是不好,因为这不是它们的目的。程序中任何给定的功能都应具有相对明确的目的,而选择该目的会导致不必要的混乱。
但这不是确定的危害。这是一种糟糕的做事方式,而且很怪异,但是是一种反模式?不,只是...奇怪。