Size: a a a

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

2020 February 14

JD

John Doe in 1С, БСП, DevOps и Архитектура
Vitaly Popov
Успех = СделатьЧтоТо_1();
Успех = СделатьЧтоТо_2(Успех);

----
Функция СделатьЧтоТо_2(РезультатПредыдущегоШага)
Если Не РезультатПредыдущегоШага Тогда
   Возврат РезультатПредыдущегоШага;
КонецЕсли
Такой вариант проигрывает вложенному дереву, ибо для того, чтобы понять, что второй метод выполнится только при успешности результата первого, придется заглянуть в этот метод.
источник

GV

Gukov Viktor in 1С, БСП, DevOps и Архитектура
Vitaly Popov
Успех = СделатьЧтоТо_1();
Успех = СделатьЧтоТо_2(Успех);

----
Функция СделатьЧтоТо_2(РезультатПредыдущегоШага)
Если Не РезультатПредыдущегоШага Тогда
   Возврат РезультатПредыдущегоШага;
КонецЕсли
Предлагаю начать срач по поводу "1С и перегрузка методов или хватит пихать новые диаграммы"
источник

GV

Gukov Viktor in 1С, БСП, DevOps и Архитектура
𝖍𝖔𝖉𝖞𝖙𝖔𝖓𝖊
Ты в код обработки ВыгрузкаМетаданных из КД2 заглядывал?

Я ужаснулся...
источник

VP

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

Легче явно передавать данные и возвращать их модифицированную копию.

Тогда не нужно понимать когда вызывается функция. Она что-то в данных меняет, это написано в её названии
источник

JD

John Doe in 1С, БСП, DevOps и Архитектура
Vitaly Popov
Хз, мне вообще такой стиль не нравиться, т.к. функции нечистые.

Легче явно передавать данные и возвращать их модифицированную копию.

Тогда не нужно понимать когда вызывается функция. Она что-то в данных меняет, это написано в её названии
Такой = какой? Данные и передаются последовательно - из предыдущего метода в последующий.
источник

VP

Vitaly Popov in 1С, БСП, DevOps и Архитектура
John Doe
Такой = какой? Данные и передаются последовательно - из предыдущего метода в последующий.
Нет, параметров же нет. Значит методы модифицируют состояние какого-то объекта, который в их области видимости. Например формы
источник

JD

John Doe in 1С, БСП, DevOps и Архитектура
Vitaly Popov
Нет, параметров же нет. Значит методы модифицируют состояние какого-то объекта, который в их области видимости. Например формы
Параметров нет - это для упрощения. Они конечно есть)
источник

JD

John Doe in 1С, БСП, DevOps и Архитектура
Функции безконтекстные
источник

VP

Vitaly Popov in 1С, БСП, DevOps и Архитектура
John Doe
Параметров нет - это для упрощения. Они конечно есть)
В идеале:
метод1 поменял что-то в данных.

Метод2 должен что-то делать только на основе состояние входных данных.

Например, если эмитируем класс, то будет как-то так
Перем Таблица;
ЗаполнитьТаблицу(Таблица);
ОбновитьСостояниеКолонки(Таблица);
ЗаполнитьКолонкуНаОснованииВнешнегоСервиса(Таблица, ДанныеСервиса);

И не важно что там на предыдущем шаге, важно состояние данных
источник

JD

John Doe in 1С, БСП, DevOps и Архитектура
Vitaly Popov
В идеале:
метод1 поменял что-то в данных.

Метод2 должен что-то делать только на основе состояние входных данных.

Например, если эмитируем класс, то будет как-то так
Перем Таблица;
ЗаполнитьТаблицу(Таблица);
ОбновитьСостояниеКолонки(Таблица);
ЗаполнитьКолонкуНаОснованииВнешнегоСервиса(Таблица, ДанныеСервиса);

И не важно что там на предыдущем шаге, важно состояние данных
Ну вот как в твоем примере организовать вложенность без вложенности?
Т.е. чтоб последующий не вызывался, если факап на предыдущем, ибо нет смысла.
источник

VP

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

JD

John Doe in 1С, БСП, DevOps и Архитектура
Vitaly Popov
А можно пример ситуации?
Четыре сферических метода возьмем:
1. Получить данные откуда-нибудь извне.
2. Разыменовать ссылки - заполнить сопоставление.
3. Посчитать что-нибудь производное.
4. Записать в БД.
источник

DK

Dmitrij Kozin in 1С, БСП, DevOps и Архитектура
John Doe
На самом деле иногда не особо понятно, как дерево вложенных вызовов (в случае успеха) по-другому реализовать.
Т.е. вот такое:
Успех = СделатьЧтоТо_1();
Если Успех Тогда
   Успех = СделатьЧтоТо_2();
   Если Успех Тогда
       Успех = СделатьЧтоТо_3;
       ...
   КонецЕсли;
КонецЕсли;
СделалЧтоТо_1 = СделатьЧтоТо_1();

Если СделалЧтоТо_1 Тогда
   СделалЧтоТо_2 = СделатьЧтоТо_2();
Иначе
СделалЧтоТо_2 = Ложь;
КонецЕсли;

СделалЧтоТо_3 = СделалЧтоТо_2 И СделатьЧтоТо_3();
источник

JD

John Doe in 1С, БСП, DevOps и Архитектура
Dmitrij Kozin
СделалЧтоТо_1 = СделатьЧтоТо_1();

Если СделалЧтоТо_1 Тогда
   СделалЧтоТо_2 = СделатьЧтоТо_2();
Иначе
СделалЧтоТо_2 = Ложь;
КонецЕсли;

СделалЧтоТо_3 = СделалЧтоТо_2 И СделатьЧтоТо_3();
Думаю, все согласятся, что твой вариант при вложенности скажем 4 или 5 методов, безоговорочно проигрывает обычному стройному вложенному деревцу из веток Если, в которых нет веток Иначе.
источник

VP

Vitaly Popov in 1С, БСП, DevOps и Архитектура
ДанныеСервиса = ДанныеСервиса();
Для каждого ПорцияДанных Из ДанныеСервиса Цикл
ПромежуточныеДанные = ЗаполнитьСопоставление(ДанныеСервиса);
РезультатРасчета = ВыполнитьРасчет(ПромежуточныеДанные);
ЗаписатьВБД(РезультатРасчета);
КонецЦикла;


или

ДанныеСервиса = ДанныеСервиса();

ПромежуточныеДанные = ЗаполнитьСопоставление(ДанныеСервиса);
РезультатРасчета = ВыполнитьРасчет(ПромежуточныеДанные);
ЗаписатьВБД(РезультатРасчета);

Функция ЗаполнитьСопоставление(ДанныеСервиса)
Результат = ФорматРезультата();
Для каждого Данные Из ДанныеСервиса Цикл
// Заполнение результата
КонецЦикла

Возврат Результат;
КонецФункции
источник

JD

John Doe in 1С, БСП, DevOps и Архитектура
Vitaly Popov
ДанныеСервиса = ДанныеСервиса();
Для каждого ПорцияДанных Из ДанныеСервиса Цикл
ПромежуточныеДанные = ЗаполнитьСопоставление(ДанныеСервиса);
РезультатРасчета = ВыполнитьРасчет(ПромежуточныеДанные);
ЗаписатьВБД(РезультатРасчета);
КонецЦикла;


или

ДанныеСервиса = ДанныеСервиса();

ПромежуточныеДанные = ЗаполнитьСопоставление(ДанныеСервиса);
РезультатРасчета = ВыполнитьРасчет(ПромежуточныеДанные);
ЗаписатьВБД(РезультатРасчета);

Функция ЗаполнитьСопоставление(ДанныеСервиса)
Результат = ФорматРезультата();
Для каждого Данные Из ДанныеСервиса Цикл
// Заполнение результата
КонецЦикла

Возврат Результат;
КонецФункции
Ну, и как в этом коде реализуется невыполнение последующих шагов при неуспехе предыдущих?
источник

VP

Vitaly Popov in 1С, БСП, DevOps и Архитектура
Мы ж опираемся на промежуточные данные. В них не попадают невалидная информация и мы потом её не обрабатываем
источник

JD

John Doe in 1С, БСП, DevOps и Архитектура
Vitaly Popov
Мы ж опираемся на промежуточные данные. В них не попадают невалидная информация и мы потом её не обрабатываем
Как будешь реализовывать логику "не пишем в БД, если на любом из предыдущих шагов была хоть одна какая-нибудь ошибка / не прошло хоть одну какую-нибудь проверку"?
источник

VP

Vitaly Popov in 1С, БСП, DevOps и Архитектура
Не класть в промежуточные данные, предназначенные для записи в БД. Логика проверки на шагах выше.

Запись в БД это запись в БД
источник

JD

John Doe in 1С, БСП, DevOps и Архитектура
Vitaly Popov
Не класть в промежуточные данные, предназначенные для записи в БД. Логика проверки на шагах выше.

Запись в БД это запись в БД
Ну т.е. предлагаешь по пустоте входящего параметра внутри самого метода проверять, нужно ли выполнять этот метод?
Чем это отличается от флага в https://t.me/ssl1c/44758?
источник