|
![]() |
#1 |
Участник
|
для добавления одного параметра в RunBase надо:
- добавить поле в класс - добавить поле в макрос со списком полей для упаковки/распаковки - по хорошему еще: 1. добавить два макроса для новой версии в classdeclaration 2. Добавить в распаковку логику по разделению этих версий - добавить в создание диалога - добавить в получение данных из диалога Для добавления параметра в SysOperationFramework надо - добавить поле в класс-контракт - добавить метод-свойство в класс-контракт - аннотировать метод атрибутами для диалога |
|
|
За это сообщение автора поблагодарили: mazzy (2), ta_and (4), Kabardian (5). |
![]() |
#2 |
Участник
|
Цитата:
Максим, а почему это проще/предпочтительнее для разработчика? Может быть я чего не знаю? Можно я повторю вопрос: "кто-нибудь может придумать "ПОЧЕМУ человек-программист захочет использовать ЭТОТ фреймворк? в каких сценариях?" |
|
![]() |
#3 |
Боец
|
Цитата:
Сообщение от mazzy
![]() О! и поэтому программист теперь должен работать не с одним классом, в котором присутствуют все переменные, а с целым набором классов, в котором все равно будут эти же переменные (но разбросанные по коду)? и к тому же через assert/invoke и methodstr?
Максим, а почему это проще/предпочтительнее для разработчика? Может быть я чего не знаю? Можно я повторю вопрос: "кто-нибудь может придумать "ПОЧЕМУ человек-программист захочет использовать ЭТОТ фреймворк? в каких сценариях?" Цитата:
Routing tasks to the .NET Common Language Runtime (CLR) environment.
Цитата:
может, кто-нибудь может придумать "ПОЧЕМУ человек-программист захочет использовать ЭТОТ фреймворк? в каких сценариях?"
Последний раз редактировалось DSPIC; 28.03.2013 в 11:25. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#4 |
Участник
|
Цитата:
![]() |
|
![]() |
#5 |
Участник
|
Цитата:
Зато - не будет переменных и кода, который генерирует интерфейс - не будет макросов и кода для упаковки распаковки Цитата:
и к тому же через assert/invoke и methodstr?
Цитата:
Максим, а почему это проще/предпочтительнее для разработчика? Может быть я чего не знаю?
Цитата:
Можно я повторю вопрос: "кто-нибудь может придумать "ПОЧЕМУ человек-программист захочет использовать ЭТОТ фреймворк? в каких сценариях?"
- программист хочет ускорить работу за счет удобного распараллеливания |
|
![]() |
#6 |
Участник
|
Анекдот:
- Внученька, у меня в молодости была только одна любовь: морячки. Максим, ты заметил, что в утверждении смешал множественное и единственное число? Если переменные (множ. число) будут в (одном) контракте, то это ничем не отличается от существующего подхода. Если каждая переменная (ед.число) будет в своем контракте, то никак нельзя сказать, что переменные в одном месте - они в разных контрактах Ну, Максим... Ну, елы-палы. ![]() почему программист почувствует себя счастливым от этого? автогенерация интерфейсов подходит только для тривиальных случаев. С которыми замечательно справляется и runbase ![]() Именно ради этого все и затевалось? ![]() О! Ты ведешь себя как 1Сники в дискуссиях. Во-первых, чего ты на меня то стрелки переводишь? Во-вторых, а чего ты тему меняешь? Мы говорим о Фреймворке. Я конечно отвечу. Но предупреждаю сразу: категорически отказываюсь обсуждать "проблемы исследования кода" в этой ветке. Примеры: * отчеты, основанные на runbaseReport * идиотские invoke-вызовы в русском модуле "Налоговый учет" * кретинские invoke-вызовы в русском модуле "Расчеты с персоналом" * масса invoke-вызовов в ax2012. конкретных примеров уже не помню. знаю только, что постоянно спотыкаюсь. Примеры, где invoke-вызовы оправданы: * модуль "конфигуратор продукции" пожалуйста, давай в этой ветке обсуждать Framework. если хочешь обсуждать "проблемы с invoke-вызовами" открывай новую ветку. |
|
![]() |
#7 |
Участник
|
Цитата:
Цитата:
почему программист почувствует себя счастливым от этого?
Отсутствующий код не надо читать, не надо разрабатывать, не надо апгрейдить на следующие версии/севиспаки (кстати, сравни сколько надо мерджить в ранбейз по сравнению с SysOperationFramework - фактически только декларацию одной переменной на параметр - метод со всеми причиндалами сам смёрджится за счет слоев). Нельзя забыть добавить переменную в список созраненных. Нельзя случайно написать другой тип у DialogField чем у переменной. Нельзя забыть получить значение поля или поменять при копипасте код, получая значения не того поля. Цитата:
автогенерация интерфейсов подходит только для тривиальных случаев.
![]() Цитата:
С которыми замечательно справляется и runbase
![]() Цитата:
Именно ради этого все и затевалось?
![]() Цитата:
О! Ты ведешь себя как 1Сники в дискуссиях.
Во-первых, чего ты на меня то стрелки переводишь? Цитата:
"проблемы исследования кода" в этой ветке.
- А что сказал папа - Мат пересказывать? - Нет - Ну тогда он промолчал" ок забьем, остаются проблемы переименования - вроде при использовании classStr/methodStr у переименователя есть вся информация о том что надо переименовывать. Цитата:
пожалуйста, давай в этой ветке обсуждать Framework.
Последний раз редактировалось belugin; 28.03.2013 в 18:54. |
|
|
За это сообщение автора поблагодарили: EVGL (3). |
![]() |
#8 |
Участник
|
Цитата:
Сообщение от belugin
![]() Отсутствующий код не надо читать, не надо разрабатывать, не надо апгрейдить на следующие версии/севиспаки (кстати, сравни сколько надо мерджить в ранбейз по сравнению с SysOperationFramework - фактически только декларацию одной переменной на параметр - метод со всеми причиндалами сам смёрджится за счет слоев).
Нельзя забыть добавить переменную в список созраненных. Нельзя случайно написать другой тип у DialogField чем у переменной. Нельзя забыть получить значение поля или поменять при копипасте код, получая значения не того поля. что-то я не увидел такого. Может плохо прочитал. |
|
![]() |
#9 |
Участник
|
![]() Цитата:
См табличку: Dialog Base getFromDialog putToDialog pack unpack | Base functionality implemented by the framework. run Implemented by the base framework. Handles marshaling execution to a CLR session Соответственно нет кода, а раз нет кода - нет проблем. Вообще у меня получился более минималистичный пример: Контракт X++: [DataContractAttribute] class TEST_HelloContract { Name name; } [DataMemberAttribute] public Name parmName(Name _name = name) { name = _name; return name; } X++: class TEST_HelloOp { } void sayHello(TEST_HelloContract _contract) { info(strFmt("Hello %1", _contract.parmName())); } \Menu Items\Action\TEST_Hello
И всё - никаких методов main, dialog, pack, unpack, макросов, extendedTypeStr и прочего. Я немножко наврал - тип таки дублируется у переменной и метода, но хотя бы их совместимость контролируется компилятором. Единственное что, к сожалению, параметры из не попадают в перекрестные ссылки (но никто не мешает их допилить, чтоб попадали). А еще плюс, что по умолчанию у нас есть программный интерфейс для операции - никто не мешает вызвать ее из другого кода без модификаций Последний раз редактировалось belugin; 28.03.2013 в 22:53. |
|
|
За это сообщение автора поблагодарили: mazzy (2), alex55 (1), S.Kuskov (3). |
![]() |
#10 |
Участник
|
|
|
![]() |
#11 |
Administrator
|
Цитата:
С т.з. оптимизации времени написания кода - любая технология по программированию проигрывает технологии Copy & Paste Ну т.е. никто никогда не пишет наследника RunBase "с нуля". Все - копируют с уже существующего примера (класса). Т.о: - Программисту без разницы - сколько кода - ему важно подправить в нескольких местах. А в двух или трех - это уже неважно. - Программисту без разницы макросы это или не макросы, если они поддаются копированию и их можно скопировать не думая. - Программист не любит писать 100 раз одно и тоже. Но скопировать код ему гораздо проще, чем создавать с нуля. Поэтому по факту код будет 100 раз растиражирован. Только не написан заново, а скопирован и выполнены мелкие правки. - Программисты внедренца далеко не всегда задумываются о производительности, т.к. отладка происходит на условиях, оторванных от жизни (в лучшем случае - есть демо-данные; в худшем - они сами из головы выдумываются этим же программистом). Все высокие разговоры о том, что код нужно не копировать, а делать единым и потом наследовать разбиваются о жестокую реальность, в которой заказчик не хочет тратить лишнее время на причесывание кода, а разработчики не могут / не хотят (нужное подчеркнуть) заниматься этим причесыванием, ибо незамотивированы (а чем мотивировать, если даже в этой ветке нет явного ответа на вопрос Почему?) В конце концов - будут или наследники RunBase или контракты или еще какие-то фишки - все сведется к инструкции для начинающего: Откопируй такой-то код и внеси тут изменения сюда и сюда.
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#12 |
Модератор
|
Цитата:
Сообщение от sukhanchik
![]() Вот тут есть одна очень маленькая, но ключевая деталь.
С т.з. оптимизации времени написания кода - любая технология по программированию проигрывает технологии Copy & Paste Ну т.е. никто никогда не пишет наследника RunBase "с нуля". Все - копируют с уже существующего примера (класса). Т.о: - Программисту без разницы - сколько кода - ему важно подправить в нескольких местах. А в двух или трех - это уже неважно. - Программисту без разницы макросы это или не макросы, если они поддаются копированию и их можно скопировать не думая. - Программист не любит писать 100 раз одно и тоже. Но скопировать код ему гораздо проще, чем создавать с нуля. Поэтому по факту код будет 100 раз растиражирован. Только не написан заново, а скопирован и выполнены мелкие правки. - Программисты внедренца далеко не всегда задумываются о производительности, т.к. отладка происходит на условиях, оторванных от жизни (в лучшем случае - есть демо-данные; в худшем - они сами из головы выдумываются этим же программистом) Образец мышления поколения Copy-Paste приведен прекрасный: один раз слажали, в двадцать мест скопировали, через год обнаружили. Чешем репу. Вывод? Очевидный - СИСТЕМА Г###О!
__________________
-ТСЯ или -ТЬСЯ ? |
|
![]() |
#13 |
Участник
|
|
|
![]() |
#14 |
Участник
|
|
|
![]() |
#15 |
Боец
|
Цитата:
Сообщение от mazzy
![]() может я чего не понимаю?
может, кто-нибудь сможет объяснить: "ЗАЧЕМ они делают это?" я, конечно, обещал не использовать термин Программистский подход но, на мой взгляд, это типичный пример пресловутого подхода: программирование ради программирования. не учитывая интересы и мотивацию людей. типичный пример - "Execution Mode". кто? в какой момент? и как сделает выбор между этими 4 режимами? может, кто-нибудь может придумать "ПОЧЕМУ человек-программист захочет использовать ЭТОТ фреймворк? в каких сценариях?" вот, например, runbasebatch имеет очень понятное, простое и человеческое объяснение: разгрузить компьютер пользователя и перенести тяжелую обработку на мощный сервер. есть более программистское (но все еще понятное) расширение этого объяснения: Заодно и параметры повторения есть, и задачи выполняются поочередно (что снижает вероятность блокировок). А для этого Фреймворка есть какое-нибудь объяснение на человеческом языке: ЗАЧЕМ? весь документ я прочитал. introduction перечитал несколько раз. все равно - нуб и опозорился. Цитата:
Сообщение от belugin
![]() для добавления одного параметра в RunBase надо:
- добавить поле в класс - добавить поле в макрос со списком полей для упаковки/распаковки - по хорошему еще: 1. добавить два макроса для новой версии в classdeclaration 2. Добавить в распаковку логику по разделению этих версий - добавить в создание диалога - добавить в получение данных из диалога Для добавления параметра в SysOperationFramework надо - добавить поле в класс-контракт - добавить метод-свойство в класс-контракт - аннотировать метод атрибутами для диалога |
|
Теги |
ax2012, runbase, runbasebatch, sysoperation framework |
|
|