29.05.2017, 12:09 | #21 |
Administrator
|
Цитата:
Цитата:
Итак, представляем себя на месте МС. Имеется АХ, которую купили у Навижна. С ней надо чего-то делать. Берем человека с улицы и ставим ему задачу - увеличить прибыль по ней. Спрашиваем этого человека - что для этого нужно сделать и какие проблемы существуют сейчас? Человек говорит - сейчас имеются большие трудозатраты по апгрейду кода, по слиянию кода - в общем по анализу кода. Мы видим, что сейчас (мы же все равно выпускаем какие-то обновления) - действительно есть проблема в том, что любое исправление нам нужно сделать в нескольких приложениях, каждое со своим сервис-паком, чтобы выпустить корректный патч. У нас есть экспертиза в виде Windows/Office и с позиции этой экспертизы - мы видим, что если АХ привести в состояние а-ля офис, то можно будет от нее ожидать максимальных продаж (как офиса). Как мы понимаем - ничего "по щелчку" не делается и любое достижение цели - это процесс. Поэтому - раз мы один раз поставили себе глобальную цель привести АХ к состоянию Windows/Office - мы к ней плавно идем. Разделение кода - это одно из средств достижения цели. Достигнет ли разделение кода конечной цели в виде увеличения прибыли - неизвестно. Но ... у нас же есть человек, который поставил понятную цель - привести АХ к Windows/Office. А дальше - это уже его зона ответственности. Если не будет продаж - то ... его можно будет уволить, а направление АХ закрыть, как неудачное Итого, отвечая на второй вопрос - разделение кода - это один из способов достижения цели, который был выбран где-то вверху МСа. И сейчас все ему следуют и стремятся. И кто-то убедил руководство МСа, что этот путь ведет к увеличению прибыли, но сейчас надо будет поработать, а эффект будет в дальнейшем. Так что совершенно необязательно действия МСа должны влечь за собой сиюминутную прибыль. Вполне вероятно, что они планируют ее увеличить потом в некотором стратегическом будущем и сейчас просто готовят платформу. Глобально - я считаю, что если у МСа уменьшатся внутренние затраты на апгрейды - им это будет проще. Даже если затраты на "оптимизацию" будут выше, чем эффект от результата. Решение все равно принимают люди и одни люди убеждают других людей. Сейчас считается, что текущий путь наиболее оптимальный.
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
29.05.2017, 12:15 | #22 |
Administrator
|
С позиции вендора надо учесть ситуацию наличия большого кол-ва разработчиков, которые между собой не всегда стыкуются. И хотя я не приветствую параметров в методе new, я могу понять разработчиков, которые это делают. Этим они фактически заставляют других разработчиков, которые не знают другой функционал - корректно вызывать и пользоваться объектами АХ.
Например, прогресс-бару нужно кол-во элементов, заголовок и текст. Вот пусть напрягается разработчик и думает, откуда их брать. И не совершает "детских" ошибок
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
29.05.2017, 12:17 | #23 |
Участник
|
|
|
29.05.2017, 12:50 | #24 |
Модератор
|
Прекрасный вопрос от человека которому по должности полагается помнить о том что вопрос "мерджить свитч или не мерждить" в недалеком будущем планируется сделать неактуальным, мерджилку отберут и крутись как знаешь (получится или нет - уже отдельная тема)
P.S. а ответ на самом деле дал Максим еще вчера - расширение без изменения предка и оверлееринга
__________________
-ТСЯ или -ТЬСЯ ? Последний раз редактировалось Vadik; 29.05.2017 в 13:00. |
|
29.05.2017, 14:08 | #25 |
Участник
|
Цитата:
т.е. достаточно посмотреть как сделаны экстеншены используя .нет дизассемблер - это отдельный набор классов на каждый тип(т.е. есть AxTable и AxTableExtension) - т.е. простым введением концепции трудоемкость поддержки AOT увеличилась вдвое |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
29.05.2017, 14:11 | #26 |
Участник
|
Цитата:
и вопрос вовсе не означает, что человек не знает ответа. знание ответа вовсе не означает, что человек не надеется узнать что-то новое. Цитата:
продолжим? Так вот: а почему "расширение без изменения предка и оверлееринга" лучше? |
|
29.05.2017, 14:49 | #27 |
Участник
|
makeObject вполне себе принимает параметры. Можно сделать фреймворк которые их ипользует. Тольпко при этом их надо будет обязательно задать заранее - то есть не подойдет - создать объект и сделать unpack - надо откуда-то брать параметры.
См, также http://picocontainer.com/constructor-injection.html |
|
29.05.2017, 14:52 | #28 |
Участник
|
А чем кстати плох вызов делегата в construct со всеми параметрами, соответствено если кому нужно может подписаться?
|
|
29.05.2017, 15:04 | #29 |
Banned
|
Цитата:
Сообщение от mazzy
продолжим?
Так вот: а почему "расширение без изменения предка и оверлееринга" лучше? P.S. Сорри, должен был открыть для этого новую тему. |
|
29.05.2017, 15:25 | #30 |
Участник
|
Цитата:
впрочем, каждый выполнить технику Пять почему в качестве самостоятельного упражнения. Результат моего поиска первопричины при помощи этой техники я изложил здесь. Последний раз редактировалось mazzy; 29.05.2017 в 15:29. |
|
29.05.2017, 15:47 | #31 |
Участник
|
Цитата:
2. Классы статически помечены ключом и можно проанализовать статически что они друг другу не противоречат - иначе придется анализировать код конструкторов 3. Понятно из кода, что реализуется паттерн "расширение" 4. Нельзя прокешровать зависимость ключ -> класс (виг знает, может в обработчике используется фаза луны) |
|
29.05.2017, 16:21 | #32 |
Участник
|
какие преимуществ получат разработчики партнеров и клиентов от этих возможностей?
|
|
29.05.2017, 17:34 | #33 |
Banned
|
Цитата:
как часть паттерна расширения The extension framework. Для отсутствия связанности между приложением и его расширениями. Используется class attribute framework как часть этого паттерна. Ищется класс помеченный данным аттрибутом. Да, телодвижений для программиста не меньше. Но наличие подобного подхода - оправданно. P.S. По сути мы отвязываемся от имени класса. Наш атрибут как внешнее имя. Это очень хорошо на самом деле для расширения. Последний раз редактировалось ax_mct; 29.05.2017 в 18:01. |
|
|
За это сообщение автора поблагодарили: ta_and (3). |
29.05.2017, 18:15 | #34 |
Участник
|
Спасибо.
Все понятно. Это расширение сделано исключительно для того, чтобы не трогать базовый класс при добавлении наследника. Т.е. вся эта архитектура, дополнительные классы, дополнительная нагрузка на сервер, кэши и прочая байда исключительно для того, чтобы МС мог безопасно закрыть свои базовые классы. Цель понятна. Выводы: 1. Для стороннего разработчика (не МС) эта технология создает исключительно дополнительные (и не спорьте) трудозатраты. 2. При разработке своих классов лучше продолжать использовать старый добрый свич для простоты поддержки, понятности и прозрачности. ПС. Сейчас у меня стоит задача разработки сложной структуры классов и мне хотелось услышать мнение сообщества по поводу необходимости использования данной технологии. Я услышал. Еще раз спасибо. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
29.05.2017, 19:42 | #35 |
Banned
|
Цитата:
Если это AX7 или существуют планы портировать на AX7, то старый добрый свитч - не хорошо. Если это AX2009, AX2012 - то пожалуй да, усложнять без необходимости нет смысла. Development tutorial: SysExtension framework in factory methods where the constructor requires one or more arguments http://kashperuk.blogspot.co.uk/2017...extension.html At the Dynamics 365 for Operations Technical Conference earlier this week, Microsoft announced its plans around overlayering going forward. The direct impact of this change is that we should stop using certain patterns when writing new X++ code. Pattern to avoid One of these patterns is the implementation of factory methods through a switch block, where depending on an enumeration value (another typical example is table ID) the corresponding sub-class is returned. |
|
29.05.2017, 20:36 | #36 |
Участник
|
спасибо )
Что мог бы сделать вендор: Extension Methods. c# https://docs.microsoft.com/en-us/dot...ension-methods Котлин https://kotlinlang.org/docs/reference/extensions.html Вот это был бы настоящий и очень хороший extension. Но вендор решил иначе. Последний раз редактировалось mazzy; 29.05.2017 в 21:46. |
|
29.05.2017, 21:50 | #37 |
Участник
|
Extension methods есть в Ax7 и они тут ни при чем. Это просто синтаксический сахар для вызова статических методов. Есть даже подобие companion objects в котлине
Последний раз редактировалось belugin; 29.05.2017 в 21:55. |
|
29.05.2017, 22:02 | #38 |
Участник
|
именно!
синтаксический сахар. именно для вызова статических методов. я имел в виду "мог бы сделать Extension Methods вместо атрибутов для создания экземпляров классов". извините, что плохо сформулировал. тем более, что уже реализовал. но нет, используются совершенно левые атрибуты. ?! как скажешь. бог с тобой. |
|
29.05.2017, 22:16 | #39 |
Участник
|
|
|
29.05.2017, 22:30 | #40 |
Участник
|
Вместо безумной конструкции
SysExtensionAppClassFactory::getClassFromSysAttribute Вместо отдельно стоящих атрибутов и системного класса с принудительно-общей логикой дать возможность создавать свои фабрики. Продумать унификацию с экстеншенами форм и менюитемами. При этом не забыв о правах. Насыпать сахара, который предоставлял бы дефолтное поведение по-умолчанию. Да много чего можно было бы сделать. И для этого не нужен был жесткий алгоритм, задействующий рефлекшен. Последний раз редактировалось mazzy; 29.05.2017 в 22:36. |
|
Теги |
sysextension framework, sysoperation framework, как правильно, полезное |
|
|