我认为这可能是一个有争议的meta答案,我参加聚会还有些晚,但是我认为在这里提及这一点非常重要,因为我想我知道您来自哪里。
设计模式的使用方式存在一个问题,即在教授设计模式时,它们会呈现如下情况:
您有此特定方案。这样组织代码。这是一个聪明的例子,但有些人为的例子。
问题在于,当您开始进行实际工程设计时,事情并非一帆风顺。您阅读的设计模式不太适合您要解决的问题。更不用说您正在使用的库完全违反了文本中解释这些模式的所有规定,每种方式都有其自己的特殊方式。结果,您编写的代码“感觉不对劲”,并提出了类似的问题。
除此之外,在谈论软件工程时,我想引用Andrei Alexandrescu的话,他指出:
软件工程可能比其他任何工程学科都具有更多的多样性:您可以通过许多正确的方式来做同样的事情,对与错之间有无限的细微差别。
也许这有点夸张,但是我认为这完全解释了您可能对代码不太自信的另一个原因。
在这样的时刻,Insomniac游戏引擎负责人Mike Acton的预言在我脑海中尖叫:
了解您的数据
他正在谈论程序的输入以及所需的输出。然后是《神话人月》中的弗雷德·布鲁克斯(Fred Brooks)瑰宝:
告诉我您的流程图并隐藏您的表格,我将继续感到困惑。给我看你的表,我通常不需要你的流程图。他们会很明显。
因此,如果您是我,我将根据我的典型输入案例以及是否达到所需的正确输出来对我的问题进行推理。并提出如下问题:
- 程序输出的数据正确吗?
- 对于我最常见的输入案例,它能否高效/快速地生成?
- 我的代码是否对我和我的队友都足够容易在本地进行推理?如果没有,那我可以简化一下吗?
当您这样做时,“需要多少层抽象或设计模式”的问题就容易回答了。您需要多少个抽象层?实现这些目标所需的数量之多,而没有更多。“设计模式呢?我什么都没用!” 好吧,如果上述目标是在没有直接应用模式的情况下实现的,那很好。使它工作,然后继续下一个问题。从您的数据开始,而不是从代码开始。