如何用图明确无歧义的表示什么是控制“反转”?



椭圆是值对象,矩形是引用对象

这是没有控制反转时的cpu(“控制”器)行走路径,所谓反转就是:给予cpu的执行更多的空间结构信息(依赖配置,由高维生物的我们给它提供预设的神秘信息,其实就是建立起对象空间的关系图,绘制空间结构图),从而让cpu行走的路径在系统局部处和上图颠倒。

tree是空间,walk是时间。walktree就是时空。所有的系统都是walktree。不仅仅是计算机系统。

cpu不再walktree而是可以在“局部”和walktree的路径相反,这就是控制反转?但,系统在整体上必定永远是walktree,反转只在局部。系统还是walktree,只是没有反转时是完全的先序行走,局部反转后使得可以在系统局部夹杂上了后续walktree了。匪夷所思啊,先序后序夹杂着进行的话如何保证不丢失问题空间呢?由高维生物的我们在高维观察后为它输入了对它来说的神秘信息保证。更进一步说:如果把cpu行走进“配置空间”的路径也算上的话:那么cpu(“控制”器)永远都没有反转,还是永远是在沿着同一个顺序行走。

所以,那些鼓吹DI、IoC的人是根本没有理解系统的运行模式?非也,因为如果说者界定了问题空间的边界的话是可以说边界内的问题空间单元之间的关系是否反转了的。比如把xml配置关系视而不见的话是可以说java对象空间中的对象之间的关系反转了的。遗憾的是说者不会去递归地无止境地去界定问题空间的边界,所以我们听到的看到的东西都有隐含的预设存在。所以读书学习还是需要悟性的。

控制反转说白了就是如何看待cpu的行走路径的问题:是以本对象为参照原还是以环境对象(容器对象)为参照原点的问题;以本对象为参照原点的时候cpu从本对象里面出发行走出本对象进入其它对象然后再转一圈再回归到本对象里面;而控制反转以容器对象为参照原点,从容器对象里面出发然后再回到容器对象里面,此时对于非容器对象来说对比反转之前,行走的路径箭头正好相反。上面的文字是对图形时空的描述,文字比图形时空读写起来费时费力。
容器对象外面还有容器对象,集合外面还有集合,空间外面还有空间。

看图说话,上面图上的每一个圆都必定有一进一出。对于每一个圆来说它都有两种对世界的认知角度:1,先进来然后再出去,在外面去转一圈后最终又进来;2,先出去,然后再进来,在里面转一圈后最终又出去。