AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX Blogs
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.10.2017, 21:20   #1  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от ax_mct Посмотреть сообщение
И интересно почему, если это в любом случае ад, не хотят давать возможность такого полного перекрытия? Ведь для этого не нужен именно overlay сверху, можно overlay и сбоку.
как я понимаю. Общая задача осуществить механизм безболезненных обновлений.

Предположим, у вас есть метод X класса Y у метода есть его публичный интерфейс:
  • предусловия
  • постусловия
  • инварианты

И есть реализация (например он может изменить приватную переменную невидимую снаружи). Если расширения смогут отменять вызов какого угодно метода, то состояние объекта может быть испорчено. Так как ваше расширение не может учесть внутреннее состояние объекта будущих версий.

Например в версии 1 вы написали расширение отменяющее вызов метода x целиком и как-то сымитировали его работу без того, что нам надо.

И есть реализация (например он может изменить приватную переменную невидимую снаружи). Если расширения смогут отменять вызов какого угодно метода, то состояние объекта может быть испорчено. Так как ваше расширение не может учесть внутреннее состояние объекта будущих версий.

Например в версии 1 вы написали расширение отменяющее вызов метода x целиком и как-то сымитировали его работу через публичный интерфейс.

В версии 1 sp 1 внутрь добавили кеш, которое ваше расширение обновить не может (не только потому, что оно не может модифицировать приватные поля, но и потому, что оно написано для версии 1, про sp1 не знает) в результате остальные методы класса берут данные из кеша устаревшие.

Собственно, если сделать подмену произвольного метода, то это и будет практически оверлееринг, но без удобного способа смотреть изменения.

Последний раз редактировалось belugin; 04.10.2017 в 21:23.
Старый 04.10.2017, 22:44   #2  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от belugin Посмотреть сообщение
как я понимаю. Общая задача осуществить механизм безболезненных обновлений.
...
Собственно, если сделать подмену произвольного метода, то это и будет практически оверлееринг, но без удобного способа смотреть изменения.
Спасибо, задумка понятна. Сделать это безболезненным. Но разве что только для вендора и то недолго. Все равно надо проводить при каждом обновлении аудит изменений на их логическую уже совместимость.

Ничего страшного в подмене нет. Это даст больше управляемости и надежности. А проверять конфликты можно и компилятором.

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

Kashperuk пишет что в Platform Update 11 что-то такое появится. Радостно наблюдать как пишется новый продукт.
https://docs.microsoft.com/en-us/dyn...tform-releases
Старый 05.10.2017, 08:55   #3  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от ax_mct Посмотреть сообщение
каждом обновлении аудит изменений на их логическую уже совместимость.
*Теоретически* (то есть отвлекааясь от Аксапты данной нам в ощущениях) при создании расширения надо руководствоваться публичным контрактом метода включая побочные эффекты а не его исходным кодом (реализацией).

Контракт может быть описан как неформально (в XML документации) так и формально (например, набором тестов, Code Contracts).

Цитата:
Ничего страшного в подмене нет. Это даст больше управляемости и надежности. А проверять конфликты можно и компилятором.
Вопрос: чем тогда это отличается от оверлееринга только хуже?

Цитата:
Ничего страшного в подмене нет. Это даст больше управляемости и надежности. А проверять конфликты можно и компилятором.
Вопрос: чем тогда это отличается от оверлееринга только хуже?

Последний раз редактировалось belugin; 05.10.2017 в 09:15.
За это сообщение автора поблагодарили: Vadik (1), mazzy (2).
Старый 05.10.2017, 20:42   #4  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
672 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Цитата:
Сообщение от belugin Посмотреть сообщение
при создании расширения надо руководствоваться публичным контрактом метода включая побочные эффекты а не его исходным кодом (реализацией).
вот это прямо золотые слова! это ж похоже на одного из трёх китов ООП!
__________________
Felix nihil admirari
Старый 05.10.2017, 23:13   #5  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от belugin Посмотреть сообщение
*Теоретически* (то есть отвлекааясь от Аксапты данной нам в ощущениях) при создании расширения надо руководствоваться публичным контрактом метода включая побочные эффекты а не его исходным кодом (реализацией).
Не вопрос когда содержание метода это одна атомарная и самодостаточная фунция.
Чтение из файла например. А вот создание строки заказа уже по сути интерфейс к процессу. А там где процесс без исходного кода никак.

Цитата:
Сообщение от belugin Посмотреть сообщение
Вопрос: чем тогда это отличается от оверлееринга только хуже?
Ничем. Да, хуже. От того что пытаются уйти от ошибок компиляции сам по себе оверлееринг никуда не исчезает. Его просто не видно. А со старым оверлеерингом - было видно.

Ведь какая цель у нас программистов в большинстве случаев? Именно что логический оверлей какого-то процесса, просто потому что это в сути стоящих перед нами задач. Мало того что процессную систему прибили ООП так теперь еще и запретили менять процессы.

Без возможности оверлееринга/подмены мы не можем вносить изменения в процесс, мы можем только подключать свои собственные независимые процессы.
Это может быть нормально само по себе, но это совершенно недостаточно для (1 закона Кибернетики) тех требований которые предьявляет наш типичный клиент.

Ладно бы не дурили голову себе и другим и закрыли систему намертво, это было бы и честно и логично. Но продолжать пропагандировать систему как платформу для разработки - это разрывает мозг.

Вот EVGL хорошо иллюстрирует.
Цитата:
Это все только слова и теоретические рассуждения. На практике все происходит с точностью до наоборот, и я могу это доказать на цифрах. При переходе с 7.1 на 7.2 наше приложение согласно отчету анализа обновления было затронуто 119 (прописью: сто девятнадцать) уничтоженными полями или таблицами, и это только data dictionary. Весь код, который это использовал - расширения, перекрытия, классы с бизнес-логикой - может идти лесом. Т.е. мастера по redesign / reengineering в Microsoft плевали на доработки и партнерские решения. Они ломали и будут ломать, с корнем удалять, менять внутреннюю логику. При этом самое худшее, что может случиться, это формально компилируемый код расширений, который просто перестал вызываться или работать из-за изменения порядка исполнения объектов.
P.S. Извиняюсь что не в теме про Погоду тьфу про аномимных оверлейщиков.

Последний раз редактировалось ax_mct; 05.10.2017 в 23:17.
За это сообщение автора поблагодарили: Link (1).
Старый 06.10.2017, 08:36   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от ax_mct Посмотреть сообщение
Не вопрос когда содержание метода это одна атомарная и самодостаточная фунция.
Чтение из файла например.
Я думаю, если залезть внутрь чтения файла, то там может быть много интересного. Блокировки, например.

Цитата:
А вот создание строки заказа уже по сути интерфейс к процессу. А там где процесс без исходного кода никак.
Все есть интерес к процессу (хотя бы небольшого) и тем не менее у всего есть публичный интерфейс и реализация.

Цитата:
Ничем. Да, хуже. От того что пытаются уйти от ошибок компиляции сам по себе оверлееринг никуда не исчезает. Его просто не видно. А со старым оверлеерингом - было видно.
То есть в подменяющих экстеншенах смысла нет вообще.

Цитата:
Ведь какая цель у нас программистов в большинстве случаев? Именно что логический оверлей какого-то процесса, просто потому что это в сути стоящих перед нами задач.
Это когда как, иногда расширение. Иногда надо написать новый код поверх существующих бизнес сущностей.

Цитата:
Без возможности оверлееринга/подмены мы не можем вносить изменения в процесс, мы можем только подключать свои собственные независимые процессы.
Это не всегда так. Можно например подменить стандартный класс своим в конструкте. То есть заменять куски проуессов там где это предусмотрено и понятно какой интерфейс у кусков.

Цитата:
Вот EVGL хорошо иллюстрирует.
EVGL я ответил.
Старый 05.10.2017, 00:42   #7  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Цитата:
Сообщение от belugin Посмотреть сообщение
И есть реализация (например он может изменить приватную переменную невидимую снаружи). Если расширения смогут отменять вызов какого угодно метода, то состояние объекта может быть испорчено. Так как ваше расширение не может учесть внутреннее состояние объекта будущих версий.
Это все только слова и теоретические рассуждения. На практике все происходит с точностью до наоборот, и я могу это доказать на цифрах. При переходе с 7.1 на 7.2 наше приложение согласно отчету анализа обновления было затронуто 119 (прописью: сто девятнадцать) уничтоженными полями или таблицами, и это только data dictionary. Весь код, который это использовал - расширения, перекрытия, классы с бизнес-логикой - может идти лесом. Т.е. мастера по redesign / reengineering в Microsoft плевали на доработки и партнерские решения. Они ломали и будут ломать, с корнем удалять, менять внутреннюю логику. При этом самое худшее, что может случиться, это формально компилируемый код расширений, который просто перестал вызываться или работать из-за изменения порядка исполнения объектов.
За это сообщение автора поблагодарили: Link (1), ax_mct (10), gl00mie (2).
Старый 05.10.2017, 09:13   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от EVGL Посмотреть сообщение
Это все только слова и теоретические рассуждения. На практике все происходит с точностью до наоборот, и я могу это доказать на цифрах. При переходе с 7.1 на 7.2 наше приложение согласно отчету анализа обновления было затронуто 119 (прописью: сто девятнадцать) уничтоженными полями или таблицами, и это только data dictionary.
Вопрос был "зачем" то есть про интенцию. То есть про теорию в голове того кто придумывал до реализации на практике. Про практику вы знаете лучше меня.

Практически сильно следят за обратной совместимостью при разработке хотфиксов и CU - то есть про обновления в рамках одной версии. При разработке следующей версии есть предупреждения которые можно игнорировать.

Мне самому интересно, как можно совместить подход в котором:
  • Можно разрабатывать только при помощи расширений
  • Точками расширения объявлены все элементы public и protected сделанные до того как расширения появились
  • Нет исчерпывающей документации по каждой точке расширения
  • Надо изменять функциональность

Теоретически надо отделять те куски которые вендор может изменить, от тех которые он будет поддерживать и следить за этим. Для разделения у нас есть public protected private и internal (причем последнее заработало на всех уровнях только в последних PU).
За это сообщение автора поблагодарили: Link (1).
Теги
chain of command, extensions

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
sertandev: AX7 Extensibility – Part 3 : Event handlers and delegates (hooks) Blog bot DAX Blogs 0 28.08.2017 19:11
ievgensaxblog: D365O. Trick to pass a value between Pre and Post event handler using XppPrePostArgs. Blog bot DAX Blogs 0 01.07.2017 10:13
How to cancel method execution in pre-event handler alicedr DAX: Программирование 6 01.01.2017 15:33
newdynamicsax: Pre / Post handlers and kernel classes. Blog bot DAX Blogs 0 25.04.2016 15:11

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 06:53.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.