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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.07.2017, 23:13   #1  
Blog bot is offline
Blog bot
Участник
 
25,459 / 846 (79) +++++++
Регистрация: 28.10.2006
mfp: Extensible X++: Chain of Command
Источник: https://blogs.msdn.microsoft.com/mfp...in-of-command/
==============
As you can see on the Dynamics Roadmap a new capability is being introduced in X++; it enables strongly typed extension capabilities of public and protected methods; including access to public and protected members. Oh; I almost forgot: This is my new favorite X++ feature. See this video to learn more. THIS POST IS PROVIDED...

==============
Источник: https://blogs.msdn.microsoft.com/mfp...in-of-command/
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
Старый 04.07.2017, 23:58   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Все ознакомтесь
За это сообщение автора поблагодарили: S.Kuskov (2), EVGL (1), mazzy (2), Logger (3), belugin (2).
Старый 05.07.2017, 02:14   #3  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,038 / 1629 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Все ознакомтесь
фича несомненно хорошая, но непонятно как это будет работать.
т.е. в Микрософт будет введен запрет на добавление в протектед методы параметров и изменения любых переменных класса?
а если добавить нужно? та же локализация добавляет кучу всего
если жесткого запрета не будет, то непонятно чем был плох оверлеинг
За это сообщение автора поблагодарили: mazzy (2).
Старый 05.07.2017, 07:30   #4  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
699 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Цитата:
Сообщение от trud Посмотреть сообщение
фича несомненно хорошая, но непонятно как это будет работать.
т.е. в Микрософт будет введен запрет на добавление в протектед методы параметров и изменения любых переменных класса?
а если добавить нужно? та же локализация добавляет кучу всего
если жесткого запрета не будет, то непонятно чем был плох оверлеинг
В МС уже давно есть тула которая проверяет не сменил ли ты часом сигнатуру метода и разрешает добавлять только опциональные параметры. Появилась она до 7ки. Как уже тут говорили, меняться будут только private и что не успеют завернуть в private до hard seal так тому и быть
Старый 05.07.2017, 07:59   #5  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,038 / 1629 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от skuull Посмотреть сообщение
В МС уже давно есть тула которая проверяет не сменил ли ты часом сигнатуру метода и разрешает добавлять только опциональные параметры.
так опциональные то параметры тоже все порушат. т.е. их же не будет в коде next экстеншена
Старый 05.07.2017, 09:10   #6  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
699 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Цитата:
Сообщение от trud Посмотреть сообщение
так опциональные то параметры тоже все порушат. т.е. их же не будет в коде next экстеншена
Откуда инфа ?
Старый 05.07.2017, 10:37   #7  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,038 / 1629 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
просто предполагаю. надо дождаться релиза конечно
если нет, получается сигнатура экстеншн метода может не совпадать с сигнатурой основного класса, надо будет перечислять только обязательные параметры, интересный момент конечно
Старый 05.07.2017, 10:47   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Blog bot Посмотреть сообщение
This is my new favorite X++ feature.
Господи, опять cast.
См. 3:41
__________________
полезное на axForum, github, vk, coub.
Старый 05.07.2017, 11:13   #9  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
699 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Цитата:
Сообщение от mazzy Посмотреть сообщение
Господи, опять cast.
См. 3:41
Нам патенты не патентировать...
Я бы лично убил человека который придумал
X++:
args.getArgNum()
Так как для обычных методов первый параметр это args.getArgNum(1), а для статических args.getArgNum(0). Т.к. 0 параметром ложиться this, а в статических методах его нет

А все потому что внутри лежит список куда они эти параметры и пихают начиная с this

Вот и приходиться использовать только
X++:
args.getArg(identifierStr())

Последний раз редактировалось skuull; 05.07.2017 в 11:16.
Старый 05.07.2017, 11:11   #10  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Господи, они переизобрели наследование, которое уже было в Аксапте с 1998 года.
Аллилуя!

Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 380
Размер:	84.3 Кб
ID:	11548

вместо атрибута ExtensionOf ключевое слово extends
вместо ключевого слова next - this.
и можно было бы не выполнять никакой работы.

вы скажете, что одно семейство классов нельзя разбить на разные модели.
да. но модели - изобретение МС. могли бы и расширить правила работы с моделями.

вы скажете, что extensions в Аксапте означает совсем не то, что extensions в других языках.
да. в других языках extensions позволяет "добавить метод" в закрытый класс, чтобы остальной код воспринимал добавленный метод как "свой". а в аксапте сделали механизм hook'ов, где механизм extensions вызывает все методы, совпадающие по сигнатуре. Этот механизм в других языках называется hook и относится к технологии создания pugin'ов.


в общем, получили x++, который сильно отличается от других мейнстримовых языков.

чьёрт поберьи
https://www.youtube.com/watch?v=d08EMFNnEXY
__________________
полезное на axForum, github, vk, coub.
Старый 05.07.2017, 11:25   #11  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от mazzy Посмотреть сообщение
Господи, они переизобрели наследование, которое уже было в Аксапте с 1998 года.
Аллилуя!
На самом деле, есть несколько существенных отличий.

Наследование не позволит вам сделать то, что делает CoC, на статических методах.

Наследование не позволит нормально сосуществовать двум различным имплементациям которые одновременно должны влиять на выполнение кода.
Старый 05.07.2017, 11:44   #12  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Наследование не позволит вам сделать то, что делает CoC, на статических методах.

Наследование не позволит нормально сосуществовать двум различным имплементациям которые одновременно должны влиять на выполнение кода.
А как расшифровывается CoC?

Дык.
Механизм extensions в Аксапте - это механизм плугинов у нормальных людей.
механизм плугинов позволяет вызвать все методы с одинаковыми сигнатурами, которые находятся в разных местах.

В этом смысле наследование и плугины - да, ортогональны друг-другу.

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

=========================
Я о чем:
  1. то, что они сделали как наследование - аллилуя! только чего же сразу так не сделали?
  2. то, что они задействовали новое ключевое слово next - отвратительно. Это отдаляет X++ от других языков.
  3. то, что они не использовали ключевое слово для перегрузки (типа overload, virtual или подобное) - по современным меркам хорошо. Но см. аргументацию Страустрапа в пользу явного указания этих ключевых слов
  4. то, что они по сути сделали friend-класс (дали доступ к внутренним переменным) - очень спорно. для extension-методов не определен порядок вызова, а внутренние переменные устанавливают статус. Поэтому ооочень будет не хватает управлением порядка вызовов extension-методов

в общем, extension-методы не новость, есть куча аналогов.
и очень хочется видеть не заклинания (cast) в стиле "This is my new favorite X++ feature", а сравнение с другими инструментами/языками. и анализ плюсов-минусов и способов минимизации минусов.

Для сравнения см. того же Страустрапа. Да, не во всем он по итогу прав (см. тот же Boost). но его доводы внушают уважение и к ним стоит прислушаться.

а тут броуновское движение какое-то.
Почему в одном случае таки расширили значение ключевого слова next, а в другом вставили какой-то атрибут? какое-нибудь ключевое слово использовать в том же месте, где "живут" extends-implements. Например, by, case, like. Да хоть тот же delegate!
https://msdn.microsoft.com/en-us/lib...or=-2147217396
__________________
полезное на axForum, github, vk, coub.
Старый 05.07.2017, 11:54   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от mazzy Посмотреть сообщение
то, что они задействовали новое ключевое слово next - отвратительно. Это отдаляет X++ от других языков.
Опять же, в Аксапте УЖЕ есть аналоги - вызов методов из MAPS (объект AOT, который является интерфейсом для нескольких таблиц)
Синтаксис ужасный, конечно. Но он уже есть.

Зачем ключевое слово там где без него можно обойтись?
и атрибут там, где как раз требуется ключевое слово.

сейчас, без ключевого слова, смысл private/protected/public в extension-классе предельно извратный.
__________________
полезное на axForum, github, vk, coub.
Старый 11.07.2017, 22:23   #14  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2922 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
Зачем ключевое слово там где без него можно обойтись?
и атрибут там, где как раз требуется ключевое слово.
Как обойтись? Я вижу только один способ. Сделать какой-нибудь предопределенное поле для обозначения оборачиваемого объекта (next.method() вместо next method()).

Атрибутом можно помечать классы и методы им нельзя обозначать какие-то штуки чем-то внутри метода.
Старый 05.07.2017, 12:14   #15  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от mazzy Посмотреть сообщение
то, что они задействовали новое ключевое слово next - отвратительно. Это отдаляет X++ от других языков.
Подумав еще...
ключевое слово next накладывает сильные ограничения в случае, если один метод в одном классе расширяет несколько других базовых.

например, мы создаем расширение post, которое должно срабатывать во всех журналах (в ГК, в складских журналах, в авансовых отчетах, в проектах и в других).

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

и, похоже, господа архитекторы не предполагали, что кто-то захочет сделать расширение для нескольких классов. Хотя атрибуты это позволяют сделать.

=======================
Господи, ну почему сразу всплывает столько вопросов к "favorite X++ feature", стоит хотя бы на 10-15 минут подумать об этой фиче.
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 05.07.2017 в 12:16.
Старый 05.07.2017, 17:32   #16  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от mazzy Посмотреть сообщение
Подумав еще...
ключевое слово next накладывает сильные ограничения в случае, если один метод в одном классе расширяет несколько других базовых.

например, мы создаем расширение post, которое должно срабатывать во всех журналах (в ГК, в складских журналах, в авансовых отчетах, в проектах и в других).

имея только ключевое слово next нельзя будет указать какой именно метод расширяемого класса вызываем. опять же, навсидку думается, что синтаксис вызова метода в map решил бы и эту проблему.
Я не понял этот пример. Напиши что именно имелось ввиду?
Можно заврэпить конкретный метод конкретного саб-класса, если нужно сделать только что-то именно для этого саб-класса.
Старый 05.07.2017, 11:48   #17  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,038 / 1629 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от mazzy Посмотреть сообщение
Господи, они переизобрели наследование, которое уже было в Аксапте с 1998 года.
я на самом деле жду когда кому-то придет в голову что эти методы должны вызываться не случайным образом(как делают сейча), а в обределенном порядке (типа сначала для экстеншена клиента, потом для экстеншена ISV, потом уже sys). слои для такого очевидно не подходят, ибо это "изобретено не нами"
За это сообщение автора поблагодарили: S.Kuskov (2), mazzy (2).
Старый 05.07.2017, 11:58   #18  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Какая вам разница, если это решает насущную проблему? Или лучше было оставить как есть: чтобы 60% кода в системе нельзя было больше расширять?
Старый 05.07.2017, 12:04   #19  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от EVGL Посмотреть сообщение
Какая вам разница, если это решает насущную проблему?
оО. И в самом деле, какая разница как копать траншею - саперной лопаткой или экскаватором. Какая разница чем чистить унитаз - можно и зубной щеткой.

Помнится в армии прапорщик говорил: мне не нужно, чтобы вы сделали, мне нужно, чтобы вы за*бались.

Цитата:
Сообщение от EVGL Посмотреть сообщение
Или лучше было оставить как есть: чтобы 60% кода в системе нельзя было больше расширять?
Абсолютно ложный выбор.
Запрета расширения не было. Запрет - это нововведение от МС.

В этом смысле да - лучше оставить как есть и не закрывать код.
__________________
полезное на axForum, github, vk, coub.
Старый 05.07.2017, 12:31   #20  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Цитата:
Сообщение от mazzy Посмотреть сообщение
оО. И в самом деле, какая разница как копать траншею - саперной лопаткой или экскаватором. Какая разница чем чистить унитаз - можно и зубной щеткой.
Именно. Никакой разницы если быстрее и меньше кода приходится писать.

Кстати, как специалист по домашнему хозяйству с пятилетним опытом холостяка должен отметить, что как минимум душевую кабину удобно чистить зубной щеткой в малодоступных местах.
Теги
chain of command

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
mfp: What is new in X++ in AX7? Blog bot DAX Blogs 2 10.02.2016 00:29
axmfg: Supply chain excellence in manufacturing Blog bot DAX Blogs 0 01.11.2013 01:11
NAV Team: New finsql.exe Command Prompt Options Blog bot Dynamics CRM: Blogs 0 28.01.2013 18:32
mfp: Dynamics AX EMEA Technical Conference 2011 Blog bot DAX Blogs 0 21.09.2011 18:11
Gareth Tucker: CRM 2011 Command Line Installs – continued… Blog bot Dynamics CRM: Blogs 0 25.07.2011 10:11
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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