|
|
#141 |
|
Участник
|
Цитата:
Цитата:
Плагин — это класс, у которого есть свойство Tabax и название которого начинается на TabaxPlugin_
, а по наследованию от класса SysConsistencyCheck, заодно в этом классе определяется и интерфейс для плагинов, и вспомогательные функции, которые плагины могут использовать, наподобие метода SysConsistencyCheck.kernelCheckTable().
|
|
|
|
|
#142 |
|
Участник
|
Но тогда с Табаксом пришлось бы параллельно распространять класс базовый. Чего и хочется избежать
Цитата:
Сообщение от belugin
Требования
Tabax должен состоянть из одной формы и больше из ничего |
|
|
|
|
#143 |
|
Участник
|
И еще где-то кешировать найденные плагины т.к. насколько я помню по игрищам с документооборотом extendedBy() довольно медленная штуковина
|
|
|
|
|
#144 |
|
Участник
|
Цитата:
Imho по-любому дожен быть 1) формализованный интерфейс для плагина с поддержкой версионности; 2) формализованный интерфейс для Табакса и его сервисных функций, предоставляемых плагину, с поддержкой версионности. Посмотрите на Far Manager plugin API, посмотрите на Winamp plugin API, посмотрите на COM-интерфейсы, в конце концов... |
|
|
|
|
#145 |
|
Участник
|
|
|
|
|
|
#146 |
|
Участник
|
Цитата:
Пока в аксапте нет пакетов, внутренних классов или делегатов я постараюсь сделать чтобы табакс было сложно случайно испортить и чтобы он занимал поменьше визуального пространства в АОТ. Я в курсе насчет плагинов в фаре, эклипсе, Trac и ... У аксапты свои ограничения, свои традиции и своя область использования и стоит это учитывать. |
|
|
|
|
#147 |
|
Участник
|
И это пишет человек, говоривший мне об абстрактных классах и интерфейсах!
Цитата:
Пока в аксапте нет пакетов, внутренних классов или делегатов я постараюсь сделать чтобы табакс было сложно случайно испортить и чтобы он занимал поменьше визуального пространства в АОТ.
Цитата:
У аксапты свои ограничения, свои традиции и своя область использования и стоит это учитывать.
Какие такие ограничения и специфика области использования заставляют приделывать плагины.. непонятно как, не используя интерфейсы, проверку типов, возможности наследования, в нарушении best practices, сложившихся традиций и элементарных "правил хорошего тона" X++? Взять тот же Far Manager, передающий и принимающий в качестве интерфейсов таблицы указателей на функции, - там хоть какая-то типизация есть на уровне прототипов функций, описания структур, на основании чего можно еще при сборке плагина сделать элементарные проверки на уровне возможностей компилятора С. А тут, получается, не будет вообще никаких проверок до самого момента вызова, до того, как ядро не тыкнется в экземпляр объекта и, к примеру, не обнаружит отсутствие метода с именем "Tabax" или то, что переданная ссылка соответствует объекту совсем другого типа. Я уже не говорю про IntelliSense и прочие прелести жизни... Но зато Tabax будет занимать в AOT минимум визуального пространства! Конечно, это все перевешивает...
|
|
|
|
|
#148 |
|
Участник
|
Как типичный случай рассматривается когда табакс стоит без плагинов. Для этой ситуации все оптимизируется. Табакс должен состоять из одной части: собственно форма чтобы можно было легко поставить и снести и сложно снести частично.
Специфика состоит в том, что в отличие от фара табакс стоит внутри приложения, которое используется и разрабатывается многими людьми. Представь себе что куча людей вставит сносит плагины в твой фар, при этом в папке плагинов нельзя делать подпапки - какая вероятность, что во первых, кто то снесет полплагина; во-вторых, кто-то увидит что в папке стало очень много файлов и прицепится к тебе чтоб тыэто снес? В-общем хочется чтобы табакс был маленькой утилитой, которая легко ставится и сносится. PS Кроме статических языков есть еще динамические языки в которых вообще нет контроля типов при компиляции и многие считают чтоэто хорошо PPS Правда другие считают что это type inferrence для бедных |
|
|
|
|
#149 |
|
Участник
|
Цитата:
![]() А лучшей иллюстрацией для авторов плагинов к Tabax было бы вынесение в плагины части его функций... Цитата:
Табакс должен состоять из одной части: собственно форма чтобы можно было легко поставить и снести и сложно снести частично.
Цитата:
Специфика состоит в том, что в отличие от фара табакс стоит внутри приложения, которое используется и разрабатывается многими людьми. Представь себе что куча людей вставит сносит плагины в твой фар, при этом в папке плагинов нельзя делать подпапки - какая вероятность, что во первых, кто то снесет полплагина
Кроме того, что касается плагинов, их составляющие после установки можно заблокировать - и пусть после этого кто-нить другой попробует удалить.Цитата:
во-вторых, кто-то увидит что в папке стало очень много файлов и прицепится к тебе чтоб ты это снес?
Цитата:
В-общем хочется чтобы табакс был маленькой утилитой, которая легко ставится и сносится.
Цитата:
Кроме статических языков есть еще динамические языки в которых вообще нет контроля типов при компиляции
|
|
|
|
|
#150 |
|
Участник
|
|
|
|
|
|
#151 |
|
Участник
|
Я свои аргументы изложил, агрументы gl00mie мне понятны, но кажутся менее сущетвенными
|
|
|
|
|
#152 |
|
Участник
|
Цитата:
X++: class test { } void test1(int _a) {; info(int2str(_a)); } void test2() {; this.test1('Гадость'); } |
|
|
|
|
#153 |
|
Участник
|
|
|
|
|
|
#154 |
|
Участник
|
Можно попрбовать сделать чтобы и овцы сыты и и волки целы. см раздел SDK:
http://erpkb.com/Axapta/Tabax/Plaginy |
|
|
|
|
#155 |
|
Участник
|
Цитата:
Вместо интерфейса Tabax - вызовы предполагаемых методов Object с предполагаемыми параметрамиX++: class TabaxPlugin_CopyWindowHwnd { Object tabax; int action; Hwnd hwnd; Object tabax(Object _value=tabax) { tabax=_value; if (!prmIsDefault(tabax) && tabax) { tabax.subscribe(methodStr(TabaxPlugin_CopyWindowHwnd, BeforeWindowContextMenu), this); tabax.subscribe(methodStr(TabaxPlugin_CopyWindowHwnd, AfterWindowContextMenu), this); } return tabax; } // ... }
|
|
|
|
|
#156 |
|
Участник
|
|
|
|
|
|
#157 |
|
Участник
|
|
|
|
|
|
#158 |
|
Участник
|
Первый реальный плагин на основе нового SDK
Плагин - открывает объект в АОТ
(функционал взят из http://www.axaptapedia.com/Editor_scripts_OpenInAOT) Для использования в поле для ввода пишем, к примеру X++: go InventTable |
|
|
|
|
#159 |
|
Участник
|
Может кто-нибудь проверить на медленной машине, тормозит ли
X++: static void Job25(Args _args) { SysDictClass plug = new SysDictClass(classNum(TabaxPluginBase)); ; info(int2str(plug.extendedBy().elements())); } |
|
|
|
|
#160 |
|
Участник
|
Цитата:
Этот - ну, секунды 4 выполнялся, хотя машинка моя не такая уж и медленная. |
|
|
|
| За это сообщение автора поблагодарили: belugin (15). | |
| Теги |
| tabax, taskbar, toolbar, инструменты, панель задач, панель инструментов, полезное, табакс, тулбар, управление окнами |
|
|
|