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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.07.2017, 11:25   #1  
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   #2  
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   #3  
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   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
Зачем ключевое слово там где без него можно обойтись?
и атрибут там, где как раз требуется ключевое слово.
Как обойтись? Я вижу только один способ. Сделать какой-нибудь предопределенное поле для обозначения оборачиваемого объекта (next.method() вместо next method()).

Атрибутом можно помечать классы и методы им нельзя обозначать какие-то штуки чем-то внутри метода.
Старый 05.07.2017, 12:14   #5  
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   #6  
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, 18:27   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Я не понял этот пример. Напиши что именно имелось ввиду?
например, универсальный лог.
например, какую-нибудь обработку/заполнение dimensions.
т.е. что-то общее для разных журналов.
журналы в аксапте могут быть никак не связаны ни в какую иерархию.

Цитата:
Сообщение от kashperuk Посмотреть сообщение
Можно заврэпить конкретный метод конкретного саб-класса
да-да. я об этом.
ты очень точно написал в единственном числе.

хотя атрибуты, представленные в исходном видео, вполне допускают несколько extensionOf-классов.
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 05.07.2017 в 18:30.
Теги
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, время: 20:46.