中国剪纸

剪刀剪纸

眉间皱痕 提交于 2019-11-28 02:01:23
  之前写过一篇随笔《 剪刀剪纸 》是给一些新同事讲面向对象时用的,当时就感觉有些不顺畅,不过用来给新同事入门足够了就没多想,最近看书时偶尔走神把这件事想起来了,顺便群里讨论时谈到聚合之间的方法调用,于是决定写一篇博客纠正一下那篇随笔里的问题。   开头先声明一下,以下只是个例子,只是用来说明对象间交互的解耦,怎么样交互我觉得更好,但是如果是真的要写一个剪刀剪纸的程序,之前随笔的做法并不一定就是不好的,有些耦合只是在需要解的时候才应该去解。另外,以下做法只是理想的做法,但是现实的项目总会有各种各样的妥协,所以主要还是随机应变,没有最好的做法,只有最合适的做法,声明暂时结束。   在剪刀剪纸的随笔里写了: 剪刀只需要关心自己发出了剪的动作,不需要关心纸,于是给纸抽象了一个东西的基类。但是回头细看其实这并没有解决问题,剪刀虽然没有和纸发生耦合,但是和东西发生了耦合,剪刀本身并不一定要剪东西,说不定就是个工艺品呢,剪刀剪纸随笔中剪子的 Cut(Thing thing) 方法参数选择了Thing等于将剪刀内部的逻辑对Thing公开了一部分,这种做法已经破坏了剪子的封装,同时也表达了一种业务逻辑,既剪刀剪东西,而且Thing也已经不是单纯的东西的概念,而是被剪子剪的东西。如果是一个初学者做项目,这么做问题或许不大,但是深究这种做法从某种角度来说是错的。   上面一段说出的问题概括一下: