Answers:
在一个大型项目中,我们已经很好地将ArcObjects代码与业务逻辑隔离开来。我会说,通常这是要走的路,而不是尝试全部模拟,即使有可能使用模拟框架来获得某种方式。
问问自己,为什么你觉得有必要嘲笑。通常,这是由于缺少抽象。考虑小的责任,并最小化巨大的丑陋ArcObject怪兽的表面。避免仅仅因为某些地方需要某些方面而拖拉ArcObject类型。
我可以从我们的项目中举一个具体的例子。该代码的一部分似乎依赖于IMxDocument。事实证明,唯一的原因是需要刷新活动视图。因此,我们改为创建了一个IViewRefresher接口,并且仅在该接口上工作;易于模拟和测试。此外,它使代码的意图更加清晰,并消除了人们开始使用IMxDocument做有趣的事情的诱惑,因为他们不想做的事情是因为我们要做的只是刷新。使用许多ArcObjects代码可以完成相同的练习。
同样,我们将对要素类的所有访问都包装在类型安全的包装器中,再次提供了可屏蔽的代码,以保护业务代码免受ArcObjects的侵害。
我们甚至没有讨论过使用ArcObjects的几何类型,但是目前我们确实允许在我们的代码中直接使用这些接口。(但是,仅允许使用界面知识,并且所有几何实例都使用我们自己的几何工厂。)
总而言之,我并不是不鼓励进行模拟,但我鼓励在与ArcObjects不同的抽象级别进行模拟。