|
21.03.2017, 13:53 | #1 |
Banned
|
Цитата:
Цитата:
Сообщение от Артем Enot Грунин
...
Системные механизмы используют множество согласованных обработчиков, логика которых не документирована. На практике, если не подходит стандарт - делаешь рядом что-то свое. Победить и изменить - как правило, себе дороже. Но это в общих чертах, конечно. Бывают случаи проще, там можно доработать стандарт, если можно на него опираться, а не менять в корне. Вендор не просто меняет способ разработки по техническим причинам в D365FO, он тупо закрывает разработку функциональности вообще со стороны партнеров и клиентов. Всякие точки расширения и события - это пластмассовая косточка с клубничным вкусом. Пососать. Событий и подписок - недостаточно. Нужна возможность замены любых классов и методов целиком. Через конфигурационные файлы. Но это будет тот же overlayering по своей сути. Последний раз редактировалось ax_mct; 21.03.2017 в 13:59. |
|
|
За это сообщение автора поблагодарили: Logger (1), Sancho (2). |
21.03.2017, 14:12 | #2 |
Участник
|
Цитата:
Цитата:
Уточню название темы: Как вести разработку с минимальными в долгосрочной перспективе трудозатратами в условиях, есть куча унаследованного кода И часть кода закрыта от изменения, а платформа предоставляет систему событий и подписок? что должен сделать вендор? что может сделать партнер/заказчик своими силами? Последний раз редактировалось mazzy; 21.03.2017 в 14:17. |
|
|
За это сообщение автора поблагодарили: ax_mct (7). |
21.03.2017, 14:32 | #3 |
Banned
|
Цитата:
Сообщение от mazzy
Как вести разработку с минимальными в долгосрочной перспективе трудозатратами
в условиях, есть куча унаследованного кода И часть кода закрыта от изменения, а платформа предоставляет систему событий и подписок? что должен сделать вендор? что может сделать партнер/заказчик своими силами? https://ievgensaxblog.wordpress.com/...xtension-code/ X++: using System.Reflection; /// <summary> /// Handles events raised by <c>SalesLineTypeEventHandler</c> class. /// </summary> public class SalesLineTypeEventHandler { [PostHandlerFor(classStr(SalesLineType), methodStr(SalesLineType, insert))] public static void SalesLineType_Post_insert(XppPrePostArgs _args) { SalesLineType salesLineType = _args.getThis(); var bindFlags = BindingFlags::Instance | BindingFlags::NonPublic; var field = salesLineType.GetType().GetField("salesLine", bindFlags); SalesLine salesLine = field.GetValue(salesLineType); if (salesLine) { salesLine.MyNewField = 42; salesLine.doUpdate(); } } } |
|
21.03.2017, 14:43 | #4 |
Участник
|
Цитата:
Но рефлексия - это тут же уход в динамическое программирование взамен статической компиляции. Со всеми плюсами и минусами. И соответствующими холиварами на эту тему ))) это тоже неправда ))) но должен он очень мало чего и мало кому. это так. |
|
21.03.2017, 14:34 | #5 |
Moderator
|
Цитата:
При таком раскладе - я могу представить что годков через 5 такой работы и вправду 85% типичных внедрений можно будет делать на чистых extensions. Только зная микрософтовское отношение к инвестициям в реинженеринг и рефакторинг, я больше верю в давление на микрософт (чтобы не лочили) или к хакерским подходам (когда в режиме on-premise система работает не совсем так как микрософт планировал ) |
|
|
За это сообщение автора поблагодарили: mazzy (5). |