0

我对 Autocad 编程非常陌生,几个月新,但我设法用大约 10 个 Autocad 命令编写了一个应用程序。这些命令中的大多数都显示一个窗口,其他所有操作都在该窗口中完成。我尝试使我的应用程序 MVVM..ish。因为我在 Models ViewModels Views 和命令之间有几乎 1 对 1 的对应关系,所以我觉得将命令放在 MVVM 的 3 个部分之一中是合适的。首先我决定将命令放在 ViewModel 中,然后我意识到我的命令只是显示一个窗口,而 ViewModel 不应该处理窗口,所以我将命令移至 View 的 Codebehind。据我了解,只要代码与视图严格相关,就可以在代码隐藏中包含代码。然后我在 Autodesk 提供的一些教程中阅读了有关 CommandClass 属性的信息,我发现了这一点:

CommandClassAttribute 此自定义属性类用于将类型标记为应用程序的命令类。一个应用程序可以指定一个并且只有一个类型作为它的命令类。AutoCAD 在具有此属性的类型上查找应用程序的命令方法。

这表明我应该有一个类来包含我的所有命令。然后我读了这个,这证实了上述内容:

对于实例命令方法,方法的封闭类型为每个打开的文档单独实例化。

所以我将命令放入视图或视图模型的第一种方法是完全错误的,因为我会让视图模型实例除了运行命令之外什么都不做。然后我在 ObjectARX 的文档中读到了这个:

如果应用程序使用 CommandClass 属性,它必须为每个包含 AutoCAD 命令处理程序方法的类型声明该属性的实例。

这直接与上面引用的教程相矛盾,并且还表明拥有多个类来处理命令是一种公认​​的做法。

所有 Autocad .NET 教程都是具有一个类和一个命令的项目,因此您不必对放置什么内容进行太多选择。

一些有经验的 Autocad .NET 开发人员能否提供一个最佳实践,或者至少是一个好的或没有错误的实践来管理一个相当大的项目中的 Autocad 命令?

4

1 回答 1

1

在我的工作中,我将该CommandClass属性附加到单个类,正如我以前启动的向导所提供的那样。

在那个命令类里面,我放了所有的命令。每一个都有CommandMethod属性。

所以它们没有附加到任何对象或视图(我真的认为这只能使用 VBA,而不是 .NET)

但是他们的代码并没有写在那里,我创建了不同的类来管理命令,所以主命令类的工作方式主要像一个命令索引,每个命令在我为自己的目的创建的不同类中调用其各自的主体。

所以,在你的位置,我可能会做出一个MyCommands具有CommandClass所有命令的属性。ViewCommands每个命令只是从下面的类中调用命令体。

创建一个ViewCommands类(以及使模型易于使用的许多其他类)。这个类doesn'tCommandClass属性,只有常规方法。它将具有从CommandClass方法调用的命令的核心。

我从来没有尝试过使用多个CommandClass,我相信最好将所有命令集中在一个地方,以便很好地跟踪你的插件所做的事情。

于 2013-07-08T21:01:50.977 回答