Size: a a a

1С, БСП, DevOps и Архитектура

2021 June 16

KK

Konstantin Kozyrev in 1С, БСП, DevOps и Архитектура
источник

ЮЧ

Юрий Чекмарев... in 1С, БСП, DevOps и Архитектура
источник

NG

Nikita Gryzlov in 1С, БСП, DevOps и Архитектура
Набор функций Посетить*. ПосетитьДоговор, ПосетитьВалюту, ПосетитьДатуОтгрузки, в которую передаётся нужный выборки.

Типа:

Процедура ОбработатьЧтоТоТам()

ВыборкаДоговор = Результат.Выбрать(...);
Пока ВыборкаДоговор.Следующий() цикл
 ПосетитьДоговор(ВыборкаДоговор);

КонецЦикла;

КонецПроцедуры

Процедура ПосетитьДоговор(ВыборкаДоговор)

ВыборкаВалюта = ВыборкаДоговор. Выбрать(...);
Пока ВыборкаВалюта.Следующий() цикл

 ПосетитьВалюту(ВыборкаВалюта);

КонецЦикла;

КонецПроцедуры


При необходимости в посетители добавляется параметр с контекстом и/или контекст хранится в переменных модуля
источник

JD

John Doe in 1С, БСП, DevOps и Архитектура
Так бы и сказал, что просто обернуть каждый уровень выборки в процедуру
источник

А

Андрей in 1С, БСП, DevOps и Архитектура
"Гренка не может стоить 100 рублей.." или как там было
источник

S

SeiOkami in 1С, БСП, DevOps и Архитектура
Далеко не везде используют гиты/хранилища. Хотя, казалось, что сложного. Но как-то так 😅
источник

‌‌‎infactum in 1С, БСП, DevOps и Архитектура
А где ты тут от рекурсии избавился?
источник

NG

Nikita Gryzlov in 1С, БСП, DevOps и Архитектура
А где ты тут не видишь?
источник

‌‌‎infactum in 1С, БСП, DevOps и Архитектура
Ладно отбой.. я не о том подумал)
У меня это.. рекурсия автоматом с параполнением стека ассоциируется. И тут глобально ничего не меняется - ты все равно вглубь обходишь.
источник

NG

Nikita Gryzlov in 1С, БСП, DevOps и Архитектура
С точки зрения алгоритма обхода - да, все тот же обход в глубину. Разница лишь в
источник

NG

Nikita Gryzlov in 1С, БСП, DevOps и Архитектура
источник

‌‌‎infactum in 1С, БСП, DevOps и Архитектура
Ага. Но без типизации оно один хрен очень шатко)
Хоть и читается лучше.
источник

NG

Nikita Gryzlov in 1С, БСП, DevOps и Архитектура
Не, ну это удар под дых просто)
источник

JD

John Doe in 1С, БСП, DevOps и Архитектура
А как кстати такую портянку рефакторить, кроме как аналогичного объединения нескольких "если" в новый метод?
источник

JD

John Doe in 1С, БСП, DevOps и Архитектура
Если не вчитываться в то, что там проверка каких-то полей
источник

‌‌‎infactum in 1С, БСП, DevOps и Архитектура
Ну в том примере нужна просто цепочка проверок)
В "нормальном" веб фрэймворке они будут в какой-нибудь коллекции красиво регистрироваться, и потом просто через декоратор у точки приема включаться)
источник

NG

Nikita Gryzlov in 1С, БСП, DevOps и Архитектура
В самом простом случае - схопнуть все ифы в один :D

Можно сделать invert if, превратив код в череду "ранних возвратов".

Можно собрать предикаты в массив и выполнять код, только если все элементы в массиве истинны
источник

JD

John Doe in 1С, БСП, DevOps и Архитектура
Что-то не прижились у меня ранние возвраты. По крайней мере в функциях, где возвращаемое значение готовится. Много возвратов превращается в ад для доработок и отладки.
источник

‌‌‎infactum in 1С, БСП, DevOps и Архитектура
1. Не сработает, т.к. там на каждую проблему свой текст ошибки
2. Ага, и получим жалобу на какую-то там сложность (вечно их путаю)
3. Вот это норм почти)
источник

NG

Nikita Gryzlov in 1С, БСП, DevOps и Архитектура
Инверт ифов как раз таки снижает когнитивную сложность за счёт убирания nested increment. А вот цикломатика вырастет, да
источник