框架设计的核心原则之一:indirection

有句话叫做: "All problems in computer science can be solved by another level of indirection"

最近学习了一些框架,很多地方都暗合了这句话。我把我能理解的外延列举一下:

  1.
通过indirection避免diretion所需的复杂性。比如通过操作系统访问硬件比直接机器码操作硬件要简单的多。

  2.
通过抽象的indirection,达到具体实现的多样性以及可插拔性。比如一个DAO可以用hibernate实现,也可以用ibatis实现,上层不必关心。
“抽象化”不限于OO领域,任何有共性的东西都可以抽象成同一种东西,比如,URL/文件路径都可以抽象成“资源”;JVM也是一个著名的例子。

  3.
你表面上在使用一种东西,但在背地里,你的框架却偷偷地通过indirection思想,通过另一种东西来为你服务。这就是“
虚拟化”,它的好处是可以让你用你熟悉的方式去使用服务。举些例子:

      a.你以为你的程序跑在一台普通电脑上,实际上那不过是个VMWare而已

      b.看上去你写的SQL都基于单个数据库,实际上你的DB早就被分库、分表的面目全非了,只不过你的架构师自写了一套jdbc driver,屏蔽了这些复杂性而已。

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.