通常,正确处理拖动的主要责任在哪里——在 NSView 或 NSViewController 中。
拖动操作的钩子都包含在 NSView 中,所以看起来 NSView 是自然的地方。此外,视图需要发挥一些作用,因为视图知道东西在哪里,所以它自然是拖动结束的专家。
但拖动通常与文档间或进程间通信有关——尤其是关于将文件从 Finder 拖动到文档中。拖动必然会导致模型的更改或添加。这就是控制器的工作。
最后,无论我们是在视图还是控制器上,我们通常会添加一堆方法来处理拖入过程,然后接收数据。人们是简单地将方法添加到视图或控制器,还是将它们转发到策略对象?