04.10.2017, 16:28 | #21 |
Участник
|
опять офтоп!
Цитата:
Сообщение от mazzy
отлично ставишь вопрос.
только давай в другой ветке? Как правильно вести разработку в условиях, когда часть кода закрыта от изменения - Sys-слой в аксапте, закрытые codeunit в навике, extensions в MS CRM здесь все-таки тема D365: passing through public method by means of Pre- and Post-event handlers
__________________
Felix nihil admirari |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
04.10.2017, 16:28 | #22 |
Участник
|
и обрати внимание на то, что сказал Макс Белугин
D365: passing through public method by means of Pre- and Post-event handlers это штатные способы, ожидаемые и предполагаемые Майкрософтом. |
|
04.10.2017, 16:33 | #23 |
Участник
|
Цитата:
как смотришь на то, чтоб убрать весь "эмоциональный шум" из этой ветки? так чтоб читатели могли выцепить суть, не отвлекаясь на "куда катится этот мир".
__________________
Felix nihil admirari |
|
04.10.2017, 16:40 | #24 |
Участник
|
это не одобрение )
Цитата:
как смотришь на то, чтобы создать пост, в котором ты сделаешь выжимку, которую считаешь нужной, чтобы читатели могли выцепить суть? с удовольствием добавлю ссылку на твой пост. дело в том, что я не вижу никакого эмоционального шума в этой ветке. я вижу обсуждение на нескольких уровнях восприятия для разных категорий читателей. |
|
04.10.2017, 16:43 | #25 |
Banned
|
Именно. И это может оказаться очень дорого. В моем примере с intercompany мы сначала пошли именно таким путем: сделать так, чтобы обычная цепочка стала работать как прямая поставка. И тут мы начали обрастать доработками и доработками доработок: копировать адрес доставки. Копировать условия Incoterms. Копировать имя. Модифицировать отчеты. В понедельник решили, наконец, остановиться и подумать еще раз в свете того, что все это в системе уже есть.
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
04.10.2017, 16:44 | #26 |
Участник
|
Цитата:
Сообщение от mazzy
и обрати внимание на то, что сказал Макс Белугин
D365: passing through public method by means of Pre- and Post-event handlers это штатные способы, ожидаемые и предполагаемые Майкрософтом. поправь меня, если я неправ, но именно это я и сделал: Воспользоваться какой-то точкой расширения для убирания функционала (не участка кода)стандартный код остался на месте, и главное, любые будущие его изменения нас не колышат.
__________________
Felix nihil admirari |
|
04.10.2017, 16:46 | #27 |
Участник
|
Цитата:
Сообщение от mazzy
это не одобрение )
удалять документы? ))))) как смотришь на то, чтобы создать пост, в котором ты сделаешь выжимку, которую считаешь нужной, чтобы читатели могли выцепить суть? с удовольствием добавлю ссылку на твой пост. дело в том, что я не вижу никакого эмоционального шума в этой ветке. я вижу обсуждение на нескольких уровнях восприятия для разных категорий читателей. я именно такой пост в оригинале и создал - с выжимкой. полностью согласен с вашими оценками о том, что в идеальном мире за такое бы сразу в адъ. но мы уже в аду.
__________________
Felix nihil admirari |
|
04.10.2017, 16:48 | #28 |
Участник
|
Цитата:
Сообщение от mazzy
Но мне чертовски не нравится что система вынуждает писать именно так.
Мне чертовски не нравится, что через несколько лет придется с последствиями решений, которые были сделаны в таком стиле. А еще больше мне не нравится, систему сейчас делают такой совершенно конкретные люди. И они это делают точно не со зла.
__________________
Felix nihil admirari |
|
04.10.2017, 16:51 | #29 |
Участник
|
Цитата:
Сообщение от EVGL
Именно. И это может оказаться очень дорого. В моем примере с intercompany мы сначала пошли именно таким путем: сделать так, чтобы обычная цепочка стала работать как прямая поставка. И тут мы начали обрастать доработками и доработками доработок: копировать адрес доставки. Копировать условия Incoterms. Копировать имя. Модифицировать отчеты. В понедельник решили, наконец, остановиться и подумать еще раз в свете того, что все это в системе уже есть.
хотя вру, конечно же, уже дублировал! например, приватный метод на форме, который делает marking для строк.
__________________
Felix nihil admirari |
|
04.10.2017, 16:54 | #30 |
Участник
|
все - не хорошее слово.
как только появляется слово все - жди логических ошибок ))) http://coub.com/view/vqeal |
|
04.10.2017, 16:55 | #31 |
Участник
|
Цитата:
X++: FormControlCancelableSuperEventArgs ce = _e as FormControlCancelableSuperEventArgs;
//cancel super() to prevent error.
ce.CancelSuperCall();
__________________
Felix nihil admirari |
|
|
За это сообщение автора поблагодарили: EVGL (5), ax_mct (3). |
04.10.2017, 17:07 | #32 |
Участник
|
|
|
04.10.2017, 17:12 | #33 |
Участник
|
Дык, я и оверлею.
Aleksey_M не ругается вслух, конечно. А мог бы... |
|
04.10.2017, 19:46 | #34 |
Banned
|
Цитата:
standard method() post()>Restore В принципе это самый что ни на есть workaround. Который великолепен если его воспринимать именно как workaround. А есть какой-то способ избежать вызова "standard method()" или подменить его? И интересно почему, если это в любом случае ад, не хотят давать возможность такого полного перекрытия? Ведь для этого не нужен именно overlay сверху, можно overlay и сбоку. Как понимаю ce.CancelSuperCall() помогает избежать вызов двух форм и добавили это как фикс, а не как часть общего дизайна. |
|
04.10.2017, 20:30 | #35 |
Участник
|
__________________
Felix nihil admirari |
|
04.10.2017, 21:20 | #36 |
Участник
|
Цитата:
Предположим, у вас есть метод X класса Y у метода есть его публичный интерфейс:
И есть реализация (например он может изменить приватную переменную невидимую снаружи). Если расширения смогут отменять вызов какого угодно метода, то состояние объекта может быть испорчено. Так как ваше расширение не может учесть внутреннее состояние объекта будущих версий. Например в версии 1 вы написали расширение отменяющее вызов метода x целиком и как-то сымитировали его работу без того, что нам надо. И есть реализация (например он может изменить приватную переменную невидимую снаружи). Если расширения смогут отменять вызов какого угодно метода, то состояние объекта может быть испорчено. Так как ваше расширение не может учесть внутреннее состояние объекта будущих версий. Например в версии 1 вы написали расширение отменяющее вызов метода x целиком и как-то сымитировали его работу через публичный интерфейс. В версии 1 sp 1 внутрь добавили кеш, которое ваше расширение обновить не может (не только потому, что оно не может модифицировать приватные поля, но и потому, что оно написано для версии 1, про sp1 не знает) в результате остальные методы класса берут данные из кеша устаревшие. Собственно, если сделать подмену произвольного метода, то это и будет практически оверлееринг, но без удобного способа смотреть изменения. Последний раз редактировалось belugin; 04.10.2017 в 21:23. |
|
04.10.2017, 21:21 | #37 |
Участник
|
|
|
04.10.2017, 21:55 | #38 |
Участник
|
Ждите Platform Update 11 который скоро появится
|
|
|
За это сообщение автора поблагодарили: ax_mct (11). |
04.10.2017, 22:04 | #39 |
Участник
|
Цитата:
X++: [ExtensionOf(classStr(Class1))] final public class Class1_Extension { public void run() { try { if (true) { throw Exception::Error; } next run(); } catch (Exception::Error) { info('Done!'); } } } Я так и не понял из ответов выше, зачем все это если есть CoC или просто автор еще про нее не узнал? Последний раз редактировалось skuull; 04.10.2017 в 22:19. |
|
|
За это сообщение автора поблагодарили: kashperuk (5), EVGL (10), trud (6), Link (1). |
04.10.2017, 22:44 | #40 |
Banned
|
Цитата:
Ничего страшного в подмене нет. Это даст больше управляемости и надежности. А проверять конфликты можно и компилятором. В этой теме рассматривается паттерн обхода который в данном конкретном случае безопасен, но при отсутствии возможности подмены всего метода целиком, это превратится в рутинный подход который иначе как суицидным не назовешь. Kashperuk пишет что в Platform Update 11 что-то такое появится. Радостно наблюдать как пишется новый продукт. https://docs.microsoft.com/en-us/dyn...tform-releases |
|
Теги |
chain of command, extensions |
|
|