Я очень новичок в программировании Autocad, новичок несколько месяцев, но мне удалось написать приложение с примерно 10 командами Autocad. Большинство этих команд показывают окно, и все остальное делается из этого окна. Я пытаюсь сделать свое приложение MVVM..ish. Поскольку у меня почти 1 к 1 соответствие между представлениями Models ViewModels и командами, я счел целесообразным поместить команду в одну из 3 частей MVVM. Сначала я решил поместить команду в ViewModel, потом понял, что моя команда показывает только окно, а ViewModel не должна обрабатывать окна, поэтому я перенес команду в Codebehind View. Как я понял, нормально иметь код в отделенном коде, если он строго связан с представлением. Затем я прочитал об атрибуте CommandClass в каком-то учебнике, предоставленном Autodesk, и нашел это:
CommandClassAttribute Этот настраиваемый класс атрибутов используется для обозначения типа как командного класса приложения. Приложение может назначить один и только один тип в качестве своего командного класса. AutoCAD ищет методы команд приложения для типа, имеющего этот атрибут.
Это говорит о том, что у меня должен быть один класс для включения всех моих команд. Затем я прочитал это, что подтверждает вышесказанное:
Для командного метода экземпляра включающий тип метода создается отдельно для каждого открытого документа.
Таким образом, мой первый подход к размещению команд в представлениях или моделях представления был совершенно неправильным, потому что у меня были бы экземпляры модели представления, не делающие ничего, кроме выполнения команды. Затем я прочитал это в документации ObjectARX:
Если приложение использует атрибут CommandClass, оно должно объявить экземпляр этого атрибута для каждого типа, содержащего метод обработчика команд AutoCAD.
Что прямо противоречит приведенному выше учебнику, а также предполагает, что это утвержденная практика - иметь более одного класса для обработки команд.
Все учебные пособия по Autocad .NET представляют собой проекты с одним классом и одной командой, поэтому у вас не будет большого выбора, куда что поместить.
Может ли какой-нибудь опытный разработчик Autocad .NET предложить передовую или, по крайней мере, хорошую или неправильную практику управления командами Autocad в довольно большом проекте?