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

Результаты опроса: Какой вариант вы бы предпочли? И почему?
validateAndWrite() + validateAndWriteNoThrow() 1 8.33%
validateAndWriteOrThrow() + validateAndWrite() 0 0%
validateAndWrite(boolean noThrow = false) 1 8.33%
validateAndWrite(boolean noThrow = true) 0 0%
validateAndWrite(boolean throwIfError = false) 0 0%
validateAndWrite(boolean throwIfError = true) 2 16.67%
я предложил свой вариант в этой ветке 2 16.67%
затрудняюсь ответить, просто хочу посмотреть результаты опроса 6 50.00%
Голосовавшие: 12. Вы ещё не голосовали в этом опросе

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.08.2021, 09:59   #21  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin Посмотреть сообщение
В дотнете tryxxx
Угу, угу!

это тот же самый случай. Только с другого конца.
Спасибо!

Жаль, что для x++ бесполезен из-за "особенностей" обработки try/catch в транзакциях.

=============
причем такие соглашения не дают абсолютно никаких гарантий.
tryxxx не гарантирует, что метод не бросит исключений (что все исключения обрабатываются)
*noThrow тоже не гарантирует, что метод не бросит исключений
*OrThrow тоже ничего не гарантирует.

однако из всех синтаксических соглашений мне больше нравится OrThrow
поскольку сообщает, что в этом месте программист явно добавил свои исключения,
и больше никаких обещаний такое именование не дает.

Что дает читающему абсолютно понятный "контракт".

собственно поэтому в вопросе явно указан [CodeStyle]
и задан вопрос о ваших предпочтениях. а не о том, "как правильно".
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 02.08.2021 в 10:04.
Старый 02.08.2021, 10:40   #22  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
однако из всех синтаксических соглашений мне больше нравится OrThrow
поскольку сообщает, что в этом месте программист явно добавил свои исключения,
и больше никаких обещаний такое именование не дает.
Надо только переписать все стандартные методы, выкидывающие исключения, чтобы они заканчивались на OrThrow.

X++:
strFmtOrThrow(getFormatStringFromSetupTableOrThrow(), transaction.calculateTaxAmountOrThrow());
А то будет непонятно в типичном случае.

С моей точки зрения OrThrow больше, так что можно принять его по умолчанию и как-то выделять методы которые, наоброт, не выкидывают исключения.
Старый 02.08.2021, 10:59   #23  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin Посмотреть сообщение
Надо только переписать все стандартные методы, выкидывающие исключения, чтобы они заканчивались на OrThrow.
Зачем?!
Вот ведь радикальный фундаменталист...

Цитата:
Сообщение от belugin Посмотреть сообщение
X++:
strFmtOrThrow(getFormatStringFromSetupTableOrThrow(), transaction.calculateTaxAmountOrThrow());
А то будет непонятно в типичном случае.
хм... надо подумать. спасибо.

Цитата:
Сообщение от belugin Посмотреть сообщение
С моей точки зрения OrThrow больше, так что можно принять его по умолчанию и как-то выделять методы которые, наоброт, не выкидывают исключения.
а как назвать второй метод?
(возвращаясь к опросу)
__________________
полезное на axForum, github, vk, coub.
Старый 02.08.2021, 11:21   #24  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
подумал...
Цитата:
Сообщение от belugin Посмотреть сообщение
X++:
strFmtOrThrow(getFormatStringFromSetupTableOrThrow(), transaction.calculateTaxAmountOrThrow());
думаю, что здесь подход такой же как и к другим длинным именам в C# и Java
в этих платформах рекомендуется делать настолько длинные имена насколько нужно, чтобы точно донести до читающего назначение метода

сравни
X++:
strFmtOrThrow(
    getFormatStringFromSetupTableOrThrow(),
    transaction.calculateTaxAmountOrThrow()
);
и
Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 21
Размер:	6.2 Кб
ID:	13205
__________________
полезное на axForum, github, vk, coub.
Старый 02.08.2021, 12:20   #25  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
а как назвать второй метод?
(возвращаясь к опросу)
Позаимствовать из любой близкой экосистемы. Так как из X++ можно вызвать .NET я бы взял Try
Старый 02.08.2021, 12:22   #26  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
думаю, что здесь подход такой же как и к другим длинным именам в C# и Java
в этих платформах рекомендуется делать настолько длинные имена насколько нужно, чтобы точно донести до читающего назначение метода
Если есть reasonable default, то префикс не нужен, чтобы точно донести...
Старый 02.08.2021, 14:27   #27  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от mazzy Посмотреть сообщение
Да ну?!
т.е. runbase с эго validate и run - "это другое"
Да. Логика другая. Это же не методы ValidateAndRun() и ValidateAndRunNoThrow(). В терминах исходного вопроса тут уместен был бы ValidateNoThrow()

Цитата:
Сообщение от mazzy Посмотреть сообщение
ну... блин... тут явная проблема с логикой.
создание методов вовсе НЕ приводит к дублированию кода.
Не приводит, если речь идет о рефакторинге или исходном проектировании архитектуры. При создании методов "естественным путем" - будут дубли

Цитата:
Сообщение от mazzy Посмотреть сообщение
это проблема конкретной команды и ее конкретного team-лидера.
это НЕ проблема самого CodeStyle.
Да. Но

1. Рассматриваемый здесь CodeStyle - не стандарт. Собственная разработка
2. При создании методов "естественным путем" требуется рефакторинг, который, в свою очередь, требует времени и сил. Вот сильно сомневаюсь, что с этим станут заморачиваться

Т.е. это все-таки проблемы той команды, которая этот самый CodeStyle будет поддерживать...

Цитата:
Сообщение от mazzy Посмотреть сообщение
Правильно говоришь - скорее всего параметров будет много.
(...)
и как понять этот метод выкинет исключение или нет?
и как понять допустимо ли здесь игнрорировать результат?
(...)
поэтому код будет усеян уродливыми конструкциями вида
(...)
а можно было бы одной строкой
Это рассуждения из цикла "сферического коня в вакууме". Реально-то все не так происходит. Как правило, задача разовая.

А вот если задача оказалась не разовая, а часто повторяется, вот в этом случае уже повод задуматься о рефакторинге и каком-то более удобном способе вызова

Цитата:
Сообщение от mazzy Посмотреть сообщение
какая постановка?
этого вопроса "Какой вариант вы бы предпочли? И почему?"?
как может быть такая постановка некорректной?
Когда фразу вырывают из контекста, то и получаем не корректную постановку. Я отвечал по контексту дискуссии. Если же вернуться к исходному вопросу, то

Цитата:
Сообщение от mazzy Посмотреть сообщение
пример в ax2009 - InventMovement::construct + InventMovement::constructNoThrow
пример в ax2012 - PcGlobalTableConstraintCellEditor::validateIntegerValue + PcGlobalTableConstraintCellEditor::validateIntegerValueNoThrow
Вот это удачный пример решения и именно на этом уровне я бы и остановился.

Т.е. в исходной постановке задачи в данном теме - это метод ValidateWrite() скопировать в метод ValidateWriteNoThrow(), а в самом ValidateWrite() вывести исключение, если проверка с ошибкой

Не надо "копать глубже" и делать ValidateAndWriteNoThrow() - это уже явно лишнее и избыточное решение

Цитата:
Сообщение от mazzy Посмотреть сообщение
генезис понятен. согласен, что именно так и происходит.
но это не повод не задавать вопросы
и это не повод не выполнять рефакторинг.
не так ли?
В теории. На практике возможны варианты. И вот не знаю, к счастью или к сожалению. Нет однозначного ответа
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 03.08.2021, 00:30   #28  
AlexSD is offline
AlexSD
Microsoft Dynamics
Сотрудники Microsoft Dynamics
 
257 / 302 (11) ++++++
Регистрация: 14.10.2003
Цитата:
Сообщение от mazzy Посмотреть сообщение
Какой вариант вы бы предпочли? И почему?
И так и так. В одном случае так, а в другом по другому. Например, код вызываемый на кнопке для проверки текущей строки или обработка кучи записей в цикле, что бы найти все ошибки во множестве записей.

Это как спросить, "вы будете есть ложкой или вилкой" и не уточнить меню.
Отвечю универсально: буду есть и ложкой, и вилкой, и еще попрошу нож

Последний раз редактировалось AlexSD; 03.08.2021 в 00:36.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
bojensen: Optional filter in SSRS | Musings by Generator Blog bot DAX Blogs 0 08.09.2014 11:11
emeadaxsupport: Manufacturing Execution in AX 2012: Issue with the "Lock employee"-parameter Blog bot DAX Blogs 0 19.09.2013 18:11
emeadaxsupport: "Parameter is missing a value" error running a customized report in Microsoft Dynamics AX 2012 Blog bot DAX Blogs 0 21.11.2012 00:12
mfp: Optional parameters in C# and X++ Blog bot DAX Blogs 0 30.01.2010 00:05
Developer notes: Null value for ADO command parameter Blog bot DAX Blogs 0 03.05.2008 08:16

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 04:32.