Зарегистрироваться | Поиск |
Результаты опроса: Какой вариант вы бы предпочли? И почему? | |||
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. Вы ещё не голосовали в этом опросе |
|
Опции темы |
|
![]() |
#1 |
Участник
|
В дотнете tryxxx
✔️ CONSIDER the Try-Parse Pattern for members that might throw exceptions in common scenarios to avoid performance problems related to exceptions. ✔️ DO use the prefix "Try" and Boolean return type for methods implementing this pattern. ✔️ DO provide an exception-throwing member for each member using the Try-Parse Pattern. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#2 |
Участник
|
Да ну?!
т.е. runbase с эго validate и run - "это другое" ![]() Цитата:
создание методов вовсе НЕ приводит к дублированию кода. ![]() Цитата:
это НЕ проблема самого CodeStyle. Насчет параметра. Правильно говоришь - скорее всего параметров будет много. вызовов метода с параметрами будет много. т.е. вот таких конструкций будет дофига: X++: myObj.myMethod(voucher, inventLocationId, true, inventColorId, false, params); и как понять допустимо ли здесь игнрорировать результат? поэтому код будет усеян уродливыми конструкциями вида X++: if( myObj.myMethod(voucher, inventLocationId, true, inventColorId, false, params) ) { throw Error::Error } X++: myObj.myMethodOrThrow(voucher, inventLocationId, true, inventColorId, params); какая постановка? этого вопроса "Какой вариант вы бы предпочли? И почему?"? как может быть такая постановка некорректной? Цитата:
Сообщение от Владимир Максимов
![]() Как правило, подобные методы редко продумываются на этапе создания архитектуры проекта. Они возникают "естественным путем" по мере возникновения в них необходимости. Соответственно и варианты реализации также возникают "по месту". Вот что в данном случае покажется более уместным, то и делают
но это не повод не задавать вопросы ![]() и это не повод не выполнять рефакторинг. не так ли? |
|
![]() |
#3 |
Участник
|
Да. Логика другая. Это же не методы ValidateAndRun() и ValidateAndRunNoThrow(). В терминах исходного вопроса тут уместен был бы ValidateNoThrow()
Цитата:
Цитата:
1. Рассматриваемый здесь CodeStyle - не стандарт. Собственная разработка 2. При создании методов "естественным путем" требуется рефакторинг, который, в свою очередь, требует времени и сил. Вот сильно сомневаюсь, что с этим станут заморачиваться Т.е. это все-таки проблемы той команды, которая этот самый CodeStyle будет поддерживать... Цитата:
А вот если задача оказалась не разовая, а часто повторяется, вот в этом случае уже повод задуматься о рефакторинге и каком-то более удобном способе вызова Цитата:
Цитата:
Т.е. в исходной постановке задачи в данном теме - это метод ValidateWrite() скопировать в метод ValidateWriteNoThrow(), а в самом ValidateWrite() вывести исключение, если проверка с ошибкой Не надо "копать глубже" и делать ValidateAndWriteNoThrow() - это уже явно лишнее и избыточное решение В теории. На практике возможны варианты. И вот не знаю, к счастью или к сожалению. Нет однозначного ответа
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
![]() |
#4 |
Участник
|
Цитата:
Сообщение от belugin
![]() В дотнете tryxxx
это тот же самый случай. Только с другого конца. Спасибо! Жаль, что для x++ бесполезен из-за "особенностей" обработки try/catch в транзакциях. ============= причем такие соглашения не дают абсолютно никаких гарантий. tryxxx не гарантирует, что метод не бросит исключений (что все исключения обрабатываются) *noThrow тоже не гарантирует, что метод не бросит исключений *OrThrow тоже ничего не гарантирует. однако из всех синтаксических соглашений мне больше нравится OrThrow поскольку сообщает, что в этом месте программист явно добавил свои исключения, и больше никаких обещаний такое именование не дает. Что дает читающему абсолютно понятный "контракт". собственно поэтому в вопросе явно указан [CodeStyle] и задан вопрос о ваших предпочтениях. а не о том, "как правильно". Последний раз редактировалось mazzy; 02.08.2021 в 10:04. |
|
![]() |
#5 |
Участник
|
Цитата:
X++: strFmtOrThrow(getFormatStringFromSetupTableOrThrow(), transaction.calculateTaxAmountOrThrow()); С моей точки зрения OrThrow больше, так что можно принять его по умолчанию и как-то выделять методы которые, наоброт, не выкидывают исключения. |
|
![]() |
#6 |
Участник
|
Цитата:
Вот ведь радикальный фундаменталист... Цитата:
Цитата:
(возвращаясь к опросу) |
|
![]() |
#7 |
Участник
|
|
|
![]() |
#8 |
Участник
|
подумал...
Цитата:
в этих платформах рекомендуется делать настолько длинные имена насколько нужно, чтобы точно донести до читающего назначение метода сравни X++: strFmtOrThrow( getFormatStringFromSetupTableOrThrow(), transaction.calculateTaxAmountOrThrow() ); |
|
![]() |
#9 |
Участник
|
Если есть reasonable default, то префикс не нужен, чтобы точно донести...
|
|
|
|