2013-07-08 3 views
0

Я очень новичок в программировании Autocad, несколько месяцев назад, но мне удалось написать приложение с примерно 10 командами Autocad. Большинство этих команд показывают окно, и все остальное делается из этого окна. Я пытаюсь сделать свое приложение MVVM..ий. Поскольку у меня есть почти 1 к 1 соответствие между моделями ViewModels Views и командами, которые, по моему мнению, было бы целесообразно поместить команду в одну из трех частей MVVM. Сначала я решил поместить команду в ViewModel, тогда я понял, что моя команда только показывает окно, и ViewModel не должен обрабатывать окна, поэтому я перевел команду в Code's Code. Как я понял, вполне нормально иметь код в коде, если он строго связан с просмотром. Затем я прочитал об атрибуте CommandClass на каком-то учебнике, предоставленный компанией Autodesk, и я нашел это:Где я должен поместить команды в проект Autocad VB.NET?

CommandClassAttribute Этих пользовательский атрибут класса используется для обозначения типа, как класс команд приложения. Приложение может назначать один и только один тип в качестве своего командного класса. AutoCAD ищет методы команды приложения для типа, который несет этот атрибут.

Это говорит о том, что у меня должен быть один класс для включения всех моих команд. Затем я прочитал это, что подтверждает следующее:

Для метода команды экземпляра тип включения метода создается отдельно для каждого открытого документа.

Так что мой первый подход к размещению команд в представлениях или в режимах просмотра был совершенно неправильным, потому что у меня бы экземпляры viewmodel не делали ничего, кроме запуска команды. Затем я прочитал это в документации ObjectARX:

Если приложение использует атрибут CommandClass, оно должно объявить экземпляр этого атрибута для каждого типа, содержащего метод обработчика команд AutoCAD.

Это прямо противоречит приведенному выше учебному пособию, а также предлагает, чтобы в одобренной практике было более одного класса для обработки команд.

Все учебные пособия по Autocad .NET представляют собой проекты с одним классом и одной командой, поэтому вам не нужно много выбирать, где их разместить.

Может ли какой-нибудь опытный разработчик Autocad .NET обеспечить наилучшую практику или, по крайней мере, одобрить или не ошибиться в управлении командами Autocad в довольно большом проекте?

+0

[Постарайтесь увидеть ссылку ниже, это может помочь вам] [1] [1]: http://stackoverflow.com/questions/1338955/autocad-in-vb-net?rq = 1 –

+0

Спасибо за ваш ответ, но у меня нет проблемы с запуском. Я уже посетил большинство этих ссылок несколько месяцев назад, когда я начал работать с Autocad .NET. К сожалению, большинство из них покрывает основную проблему hello world. – Andrei

ответ

1

В моей работе у меня есть атрибут CommandClass, прикрепленный к одному классу, предоставленный мастером, который я использовал для запуска.

Внутри этого командного класса я поместил команды ВСЕ из них. Каждый с атрибутом CommandMethod.

Таким образом, они не привязаны к какому-либо объекту или виду (и я действительно думал, что было возможно только с помощью VBA, не .NET)

Но их код не написан там, я делаю различные классы, чтобы управлять команды, поэтому основной командный класс работает в основном как индекс команды, каждая команда вызывает его соответствующее тело в разных классах, которые я сделал для своих целей.

Итак, на вашем месте, я бы, вероятно, сделал MyCommands с CommandClass attibute, имея все команды. Каждая команда просто вызывает тело команды из класса ViewCommands ниже.

Создайте класс ViewCommands (и многое другое, что вам нужно для упрощения вашей модели). Этот класс doesn't имеет атрибут CommandClass, просто используйте обычные методы. Он будет иметь ядро ​​команд, которые вызывают от CommandClass методов.

Я никогда не пытался работать с более чем одним CommandClass, и я считаю, что лучше сконцентрироваться на всех командах в одном месте, чтобы хорошо отслеживать, что делает ваш добавочный элемент.

+0

Спасибо за ваш вклад и за обмен опытом, но я хотел бы оставить вопрос без ответа еще на несколько дней, чтобы, возможно, гуру Autocad.NET увидеть его и дать более обоснованный ответ. – Andrei

+0

Как я недавно узнал, помощь просто неверна, когда говорится, что это может быть только один атрибут commandclass, поэтому не было намерения Autodesk иметь только один командный класс. – Andrei

+0

Итак, это зависит от вас. Вероятно, наилучшая практика будет получена из общей практики разработки, поскольку я ничего не видел в отношении Autocad .NET. Возможно, вам даже не нужен атрибут 'CommandClass', моя помощь в мастере добавления добавляет, что он не является обязательным, но повышает производительность. –

Смежные вопросы