这是来自Michael Feathers的一篇著名文章,Negative Architecture消极架构已经被广泛传播。下面结合中国老子思想解释与翻译如下,从“无与有”角度理解“架构不做什么”反而是更好的选择:
你可能以前已经看过这张照片,这是人们用来展示感知如何运作的图像;你要么看到两张脸看着对方(黑色部分);要么看到一个花瓶(白色部分)。在格式塔心理学的术语中,黑色部分成为人物轮廓(两张脸),而把白色部分看成花瓶的人则会把黑色部分看成是白色花瓶所在的背景。我们可以在花瓶和面孔之间切换,但我们不能同时看到它们。我们大脑自动告诉我们这是人物轮廓,这是我们最先感知的对象,认识到花瓶和背景属于另外一种观察方式。
由 Betty Edwards 撰写 的“在大脑右侧绘图 ”一书 利用这种背景知识帮助人们更好地绘画。她的一个练习是故意不忘记的人的轮廓,当学生正在画一个人或一把椅子,她告诉学生绘制这些轮廓时要忘记他们是什么,这样,你将绘制你看到的纯粹外形,不让你的大脑告诉你它是一个人或一个椅子等对象,因为当你的大脑对其进行分类时,它总是会开始美化,我们知道一个人什么样子,大部分是根据记忆印象而不是我们实际看到的这个人什么样。(banq注:我们看到一张桌子为什么知道它是桌子?我们仅仅看到桌子的一个面就是能判断?桌子的其他三个面其实靠意向想象。)
在软件中也发生了类似的事情。我们设计的任何系统都由部件组成 - 组件,框架,库或服务。无论我们制作它们还是使用它们都无关紧要。这些部件都对我们是有用的(banq注:有以为利 有用是王道!?),这就类似于上面的人的轮廓。
那么换个角度看,什么是花瓶的背景呢?背景是这个软件不做什么的列表(banq注:“无”的列表,无与有的区别)。
函数编程的一个很好的例子是Haskell中的IO Monad。应用程序中的任何代码或者在IO Monad中 - 在这种情况下它可以执行IO - 或者在代码之外的某个地方(这样你的代码就变得纯粹),这样你可以保证你的代码就不会做IO(委托给IO Monad了),这种保证很有用,当你查看这段代码时,你就不会太费神,或过于担心(因为他不会做IO,你就不会看到做IO的代码)。
这些保证构成了一种消极的架构: 它是一系列你知道在系统的各个部分都不会发生的事情。(banq注:无以为用=无用吗?错了,守住“无”让你事倍功半)
因为,关于“能做什么”的潜在的列表是无限的,但这并不能阻止人们认为“能做什么”这种观点是有用的。(banq注:有以为利=有就有利害得失,更多人注重“有”,拥有 金钱 名利 功名,这些都是无限的,穷其一生你能拥有一切吗?)
如果您在系统中某个地方使用特定的持久性技术,那么是否能够说它仅应该在这里使用,而不用在系统其他地方使用?其他技术也是如此。
知道什么是"不能做"的事情可以减少陷阱的数量,它将架构置于坚实的基础之上。
(banq注:无胜于有!)