Я разрабатываю плагин для Dynamo в C ++ / CLI (.NET), и у меня проблема с видимостью метода.
По сути, Dynamo будет анализировать DLL, и всеоткрытые классы и методы появятся в пользовательском интерфейсе, в то время как закрытые методы и другие методы с атрибутом IsVisibleInDynamo
, установленным на false
, даже если они объявлены как открытые.
Теперь мы ориентируемся на плагин для двух групп пользователей: конечных пользователей, которые будут использовать плагин только в Dynamo, и разработчиков, которые могут расширить наш плагин для создания другой библиотеки.
В библиотекеУ нас есть набор классов, например, Vertex
, и фабрики для создания экземпляров этих классов, например, VertexFactory
.Чтобы создать Vertex
, необходимо вызвать VertexFactory::Create(...)
, и его конструктор создаст Vertex
.
Класс Vertex
, безусловно, должен быть открытым, так как он используетсякак конечные пользователи, так и разработчики, однако VertexFactory
должны быть видны только разработчикам.Поэтому я объявляю методы в VertexFactory как публичные, но устанавливаю IsVisibleInDynamo
в true.
В настоящее время наш плагин тесно связан с Dynamo, однако я хотел бы разделить плагин на две библиотеки DLL: одну, скажем, PluginNET
, не зависит от приложения, так как мы начинаем расширяться на другие приложения;а другой, скажем, PluginDynamo
, предоставляет функциональные возможности, связанные с Dynamo.
Фабричные классы должны перейти на PluginNET
, однако я сталкиваюсь с проблемой скрытия этих классов от Dynamo, потому что IsVisibleInDynamo
Атрибут зависит от Dynamo.
Я думаю о том, чтобы создать еще одну DLL, скажем, PluginFactories
, однако я столкнусь с циклической зависимостью, где методы создания в PluginNET
, которыесоздаст Vertex
и т. д. для обращения к фабричным классам, таким как VertexFactory
в PluginFactories
, но PluginFactories
зависит от фактических конструкторов в PluginNet.
Существует ли более правильный механизм / архитектура ООП, который необходимо скрытьэти классы, и знает ли кто-нибудь лучшую альтернативу для решения этой проблемы?