Основы менеджмента кода в 1С

0. keleg 322 17.10.08 10:26 Сейчас в теме
Продолжаем тему рефакторинга, начатую на примере "Глокой Куздры"
Итак, каковы основные принципы поддержания кода в рабочем состоянии?

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. MSensey 49 17.10.08 10:26 Сейчас в теме
2. Душелов 3915 17.10.08 10:27 Сейчас в теме
162. sgsoft 27.10.08 12:33 Сейчас в теме
Несколько замечаний по поводу прочитанного.
1) Каждая статья должна иметь ЦЕЛЬ - для чего все это пишет.
Цитата(опуская "куздру - муздру" ) "Много говорилось о том, что названия процедур, функций и переменных должны быть «говорящими» должны соответствовать логике их использования"
-и это есть цель статьи? Или цель поучить читающих правильному именованию переменных и процедур - для этого есть материалы самой фирмы 1С, или же цель - помочь начинающим струтуризировать свои подходы к созданию программ на 1С?

2) Если цель -2, тогда нужно начинать с методов структурного программирования, которые и лежат в основе рефакторинга.
а именно - ПРОЕКТИРОВАНИЕ ПРОГРАММ СВЕРХУ ВНИЗ. Я помню еще те времена, когда программы сначала оформлялись в виде блок-схем, так вот - Законченная блок-схема должна располагаться на 1-2 страницах. Расшифровка блока - также на 1(2) и т.д.
Метод понятен.
Поскольку от блок-схем ушли, то практически любую программу можно описать так
//==============
Процедура СделатьТоТо1(Парам1)
СделатьСеТо1(новПарам1);
...
СделатьСеТо1(новПарам1);
КонецПроцедуры // СделатьТоТо1(Парам1)
//---- основная программа
СделатьТоТо1(Параметры1) ;
СделатьТоТо2(Параметры2) ;

Если ЧтоТО Тогда
СделатьТоТо3(П3);
Иначе
СделатьТоТо4(П4);
КонецЕсли;


СделатьДействиеN(ПараметрыN);
//---

Далее развивать не имеет смысла, т.к. уже пересказан весь смысл данного выступления

3) Хота про куздру (или как там ЕЁ) - занимательно, хотя бы потому, что с этой фразы давным-давно начинал преподаватель (на курсах по английскому языку на сдачу кандидатского минимума) свой рассказ про алгоритмы перевода научно-технических текстов.
163. vkr 101 30.10.08 12:32 Сейчас в теме
(162) п.(2) - ПОЛНОСТЬЮ согласен !!!
В конце концов, любая программа (неважно - на 1С, на С, на Паскале или на ассемблере) ДОЛЖНА быть грамотно спроектирована, аккуратно написана и хорошо отлажена.
А какими методами проектирования, написания и отладки пользуется аФФтар программы (или коллектив аФФтаров) - не сильно важно... :)
Хотя, лично мне кажется, что в области современного "официального" 1С-программирования господствует принцип "срубания бабла". :(((
Что, собственно, и дает основания для ведения подобных дискуссий, а также работу всем тут присутствующим... :)
А по сути дела, могу в очередной раз посоветовать прочесть вечнозеленую книжку Фредерика Брукса "Мифический человеко-месяц"... :)
3. MSensey 49 17.10.08 10:29 Сейчас в теме
Это очередное самоутверждение или попытка поделиться знаниями?
По-моему достаточно много книг в котрых давно написано более граммотно.
4. Душелов 3915 17.10.08 10:31 Сейчас в теме
(3) Написано, но 1С-чики их большей частью не читают, а тут с примерами на 8-ке. Пусть будет!
6. MSensey 49 17.10.08 10:37 Сейчас в теме
(4) плохо что не читают. Лучше читать то, чем это.
5. keleg 322 17.10.08 10:32 Сейчас в теме
(3) Мне не встречались статьи, в которых рефакторинг переносился на почву 1С (достаточно специфическую).
Так что, увы, пока конкурентов нет. Если есть что-то "более грамотное" на эту тему - рад буду почитать.
7. MSensey 49 17.10.08 10:37 Сейчас в теме
(5) А разве примемы рефакторинга зависят от языка программирования?
8. keleg 322 17.10.08 10:39 Сейчас в теме
(7) да. Тот же Фаулинг базируется на ООП, которой в 1С нет в помине, соответственно, туча методов неприменимы.
(6) Прочитают это, заинтересуются, будут читать и первоисточники.
18. artbear 1186 17.10.08 15:02 Сейчас в теме
(8) За незнание фамилии одного из ярых поборников и основоположников рефакторинга - Фаулера - минус :(
А по статье Плюс, конечно :)
Вещь полезная, но ИМХО как раз к языку не нужно сильно привязываться, большинство приемов рефакторинга достаточны универсальны для любого языка программирования.
10. keleg 322 17.10.08 10:47 Сейчас в теме
(3) А насчет самоутверждения... когда-то мне довелось написать программку, бывшую долгое время лучшей в своем классе (калькуляторы) в мире (все высшие награды всех мне известных софтверных архивов) NumLock Calculator, он же EldosAnyCalc
Так что пересаживаться на 1C было очень интересно и познавательно. Правда в 7ке я бы жить нормально не смог :-) А вот 8ая платформа в своем роде шедевр, но это еще не все поняли :-)
Kolunya; orefkov; artbear; PowerBoy; JohnyDeath; support; +6 Ответить
14. JohnyDeath 297 17.10.08 12:38 Сейчас в теме
(10) ты автор NumLock Calculator-а??
Спасибо тебе огромное за него!!! До сих пор стоит и пользуюсь! Очень удобная штуковина!! В универе, помнится, даже что-то писал для него (вот что именно - не помню, но точно не шкурку).
15. JohnyDeath 297 17.10.08 12:41 Сейчас в теме
+(14) специально для Abadonna:
В предложении "До сих пор стоит и пользуюсь!" я имел ввиду NumLock Calculator )))))))
(сори за офф)
Abadonna; +1 Ответить
16. Abadonna 3859 17.10.08 12:52 Сейчас в теме
17. CheBurator 17.10.08 13:34 Сейчас в теме
(14) О!!! я тоже эту прогу юзал одно время, спасибо!
19. artbear 1186 17.10.08 15:06 Сейчас в теме
В (10) также поставил + - так что в целом положительная разница, т.е. моя оценка за статью.
.
Правда, за слова об отсутствии ООП хочется поставить небольшой минус.
ООП нету в штатной 77 и 8, но для 77 все давно нами придумано и используется :) - ВК 1С++, лично я юзаю больше 6 лет.
8 в этом плане очень ущербна :(
194. orefkov 1012 30.08.16 16:25 Сейчас в теме
(10) за NumLock Calculator огромное спасибо! Пользуюсь до сих пор.
11. Abadonna 3859 17.10.08 10:50 Сейчас в теме
(9) А чего воевать? Открываем ЖКК и на первой странице видим: "Встроенный язык (далее по тексту - язык) представляет собой предметно-ориентированный... "
Они сами четко определяют язык как ПОП, а не ООП
12. keleg 322 17.10.08 10:54 Сейчас в теме
(9) ООП нет также и по принципам. Инкапсуляция ограничена (нельзя создавать свои объекты), наследования вообще нет, полиморфизма - тоже (а вот его очень хочется, чтоб можно было конфигурации на уровне методов, а не на уровне кусков кода подправлять).
Ну и Нуралиев открыто заявлял, что "ооп нет и пока не планируется"

13. coder1cv8 3477 17.10.08 12:06 Сейчас в теме
Спасибо. Хорошая статья!
20. Altair777 640 17.10.08 15:17 Сейчас в теме
Ставлю плюсик, хотя не со всеми утверждениями согласен.
Например, > Блок кода длиннее 7-10 строчек должен оформляться в отдельную процедуру или функцию
Это, наоборот, может привести к трудночитаемости кода и, как следствие, к ошибкам.
Я бы переформлировал бы.
Блок кода, выполняющий более N-ого количества действий, должен оформляться в отдельную процедуру или функцию
Serg_72; YauheniL; +2 Ответить
21. JohnyDeath 297 17.10.08 15:33 Сейчас в теме
(20) а тут я с тобой не соглашусь.
По мне - автор статьи прав. Читаемость кода будет лучше, если он будет разбит на блоки по принципу "одна функция должна умещаться на одном экране" ((с) Малюгин Дмитрий)
И не важно сколько раз она вызывается 1 или 101. Я, когда открываю глобальник ЗиКа, тихо ох*еваю. Вообще не представляю как там можно всё сопровождать...
22. Altair777 640 17.10.08 15:40 Сейчас в теме
(21) У меня 61 строка помещается :-)
А вот посмотрите на этот кусок

Код
//---------------------------------------------------------------------------
Процедура ПриНачалеРаботыСистемы()

   _СпрПользователи=СоздатьОбъект("Справочник.Пользователи");
   _СпрНаборыПрав=СоздатьОбъект("Справочник.КД_НаборыПрав");

   _СпрИдКон=СоздатьОбъект("Справочник.КД_ИдКон");
   _СпрДоступКон=СоздатьОбъект("Справочник.КД_ДоступКон");

   _СпрИдСпр=СоздатьОбъект("Справочник.КД_ИдСпр");
   _СпрДоступСпр=СоздатьОбъект("Справочник.КД_ДоступСпр");
   _СпрДоступСпрРекв=СоздатьОбъект("Справочник.КД_ДоступСпрРекв");

   _СпрИдДок=СоздатьОбъект("Справочник.КД_ИдДок");
   _СпрДоступДок=СоздатьОбъект("Справочник.КД_ДоступДок");
   _СпрДоступДокРекв=СоздатьОбъект("Справочник.КД_ДоступДокРекв");

   _СпрИдОтч=СоздатьОбъект("Справочник.КД_ИдОтч");
   _СпрДоступОтч=СоздатьОбъект("Справочник.КД_ДоступОтч");

   _СпрИдОбр=СоздатьОбъект("Справочник.КД_ИдОбр");
   _СпрДоступОбр=СоздатьОбъект("Справочник.КД_ДоступОбр");

   _СпрИдЖур=СоздатьОбъект("Справочник.КД_ИдЖур");
   _СпрДоступЖур=СоздатьОбъект("Справочник.КД_ДоступЖур");
   
   _СпрРоли=СоздатьОбъект("Справочник.КД_Роли");

   ОткрытьФорму("Обработка.КД_ЗаполнениеДоступа","НачалоРаботыСистемы");

   // установка текущего пользователя
   Если ПустоеЗначение(ИмяПользователя())=0 Тогда
      Если _СпрПользователи.НайтиПоКоду(ИмяПользователя())=0  Тогда
         _СпрПользователи.Новый();
         _СпрПользователи.Код=ИмяПользователя();
         _СпрПользователи.Наименование=ИмяПользователя();
         _СпрПользователи.Право=НазваниеНабораПрав();
         _СпрПользователи.Записать();
         _СпрПользователи.НайтиПоКоду(ИмяПользователя());
      Иначе
         _СпрПользователи.Наименование=ИмяПользователя();
         _СпрПользователи.Право=НазваниеНабораПрав();
         _СпрПользователи.Записать();
      КонецЕсли;
      _Пользователь=_СпрПользователи.ТекущийЭлемент();
      _ПользовательИмя=СокрЛП(ИмяПользователя());
      _Право=_СпрПользователи.Право;
   Иначе
      Предупреждение("Пользователь системы не определен!"
      +РазделительСтрок+"Продолжение работы невозможно.",10);
      СтатусВозврата(0);
      Возврат;
   КонецЕсли;

КонецПроцедуры
Показать полностью


55 строк. Его нужно было на 6 процедур разбить? :D
25. JohnyDeath 297 17.10.08 16:11 Сейчас в теме
(22) я ж говорю: "если помещается - пусть будет". Не помещается - лучше разбить, но ес-но не всегда получается/хочется.
Согласись, что ф-ию на 500 строк трудновато читать.
28. Altair777 640 17.10.08 16:17 Сейчас в теме
(25) А с чем Вы тогда не согласились в (21)???
35. JohnyDeath 297 17.10.08 16:34 Сейчас в теме
(28) я соглашался с тем, что
Блок кода длиннее 7-10 строчек должен оформляться в отдельную процедуру или функцию
правда с небольшой оговоркой: не 10 строчек, а экран или логически полное действо.

С автором статьи я не согласен вот по этому поводу:
Свертывание процедуры/функции. Обратное выделению процедуры/функции действие. Применяется, если текст процедуры в ходе изменения упростился настолько, что понятнее будет включить его напрямую в код, где вызывалась процедура.
т.к. завтра надо будет не просто очистить таблицу оплат, а ещё и новую колонку добавить, то придётся по всему коду бегать....
39. Altair777 640 17.10.08 16:38 Сейчас в теме
(35) нет, в (21) ты не "соглашался" с автором статьи, а "не соглашался" со мной.
Разницу этих в понятиях понимаешь?
40. JohnyDeath 297 17.10.08 16:46 Сейчас в теме
(39) Автор предлагал разбивать куски по "количеству строк", а ты по "количеству раз, который этот код используется".
Разницу этих в понятиях понимаешь? (с)
;)
43. Altair777 640 17.10.08 16:52 Сейчас в теме
(40) да вы, батенька, читать не умеете
> (39) Автор предлагал разбивать куски по "количеству строк", а ты по "количеству раз, который этот код используется".

в (20) я написал
Блок кода, выполняющий более N-ого количества действий, должен оформляться в отдельную процедуру или функцию
44. JohnyDeath 297 17.10.08 16:58 Сейчас в теме
46. Altair777 640 17.10.08 17:01 Сейчас в теме
(44) "ой" не катит
Извиняйся :-)
А то обхаял меня и "ой"???
49. JohnyDeath 297 17.10.08 17:03 Сейчас в теме
(46) Да никто тебя не хаял. Значит написал непонятно, раз я не понял ;)))
Извиняй!
50. Altair777 640 17.10.08 17:07 Сейчас в теме
(49) Извинения приняты

Как говорил один профессор студентам - "Мы вам знания дали, но это не значит что вы их получили" :-)
"Блок кода, выполняющий более N-ого количества действий, должен оформляться в отдельную процедуру или функцию"
И где в этой фразе есть хоть одно слово "раз"?
42. Altair777 640 17.10.08 16:50 Сейчас в теме
(35) > А процедуры не нужно смотреть, чтоб понять, что они делают.
Это должно описывать их название
(36) > А зачем их все смотреть то? Ну есть они где то там, что то делают. Если из названия процедуры понятно что она делает, то зачем смотреть ей в код?

А кто-нидудь может себе представить как разобраться в отчете, состоящем из 800 строк, разбитом на 100 процедур, из которых только 5 вызываются несколько раз?
Тем более, если это не тобой написанный отчет и который нужно изменить?
48. keleg 322 17.10.08 17:03 Сейчас в теме
(42) У меня в калькуляторе было, если не ошибаюсь, 40000 строк. Ну как-то же я в них разбирался? :-)
Это делается методом деления на слои. Например есть слой процедур которые собирают данные для отчета, есть те, кто их преобразовывает, есть те, кто выводит. Соответственно, главная процедура имеет три строчки - ПолучитьДанные(), ПреобразоватьДанные(), ВывестиДанные().
Не нужно же смотреть на все 800 строк сразу? Я так вот точно не могу, я обычный человек :-)
При правильном наименовании процедур и правильной передаче контекста и поиск ошибок, и добавление возможностей происходят легко.
p.s.
Язык 1С 7.7 устроен так, что оформление кода через функции часто невозможно. Увы, но это сильно ухудшает читаемость и ничего сделать с этим нельзя.
52. Altair777 640 17.10.08 17:10 Сейчас в теме
(48) Оъявлять переменные в цикле нельзя! Кажется... :-)
Поэтому напишите мне свой кусок кода инициализации церез цикл, плиз
55. keleg 322 17.10.08 17:17 Сейчас в теме
(52) А добавлять элемент в список? :-)
56. Altair777 640 17.10.08 17:23 Сейчас в теме
(55)
1) В цикле обхода справочника
2) А зачем его добавлять? :-)
просто обходить справочик, а не список значений
179. DionX 99 25.11.08 04:06 Сейчас в теме
(25)
>>Согласись, что ф-ию на 500 строк трудновато читать
фи! ты, брат, ни чо не понимаешь! :-D Открой Зик, написанную чуть ли не САМИМИ создателями САМОЙ 1С! К примеру, расчетную ведомость... Там только один из вариантов (!) формирования этой ведомости состовляет чуть более 1700 строк! А есть ещё второй вариант! И это всё одна процедура!!!!
Меня на днях попросили сделать третий вариант, просто с другой группировкой (по категориям должностей), я, наивный, потирая руки от предвкушения лёгких денег открыл обработку и... молча сполз под стул. Пришлось писать третий вариант с нуля, и получился он у меня менее 150 строк вместе с тремя небольшими вспомогательными функциями!.. А ты говоришь "Согласись, что ф-ию на 500 строк трудновато читать" :-D
З.Ы. Извините за некоторый офтоп, просто недавняя рана, накипело)))) Просьба статью с приложениями в пару книг по рефакторингу отправить Нургалиеву! :-D
30. keleg 322 17.10.08 16:27 Сейчас в теме
(22) Честно говоря - очень плохочитаемо.
Как бы я сделал?
1) все переменные с подчерком объединил бы в одну структуру, которую бы сделал в цикле по метаданным. Однако строчки три, точнее не скажу - 1с под рукой дома нету. Понятно, эту структуру бы возвращала функция. (список или таблицу - нужно подумать)
2) То, что под Если и под Иначе бы тоже сделал процедурами

Единственное, я 8ку знаю и люблю гораздо больше 7ки, потому не уверен, возможен ли в 7ке цикл по метаданным.
33. Altair777 640 17.10.08 16:32 Сейчас в теме
+32 Адресовано keleg по поводу (30)
34. Vitek 17.10.08 16:33 Сейчас в теме
(30)>возможен ли в 7ке цикл по метаданным.
Возможен.
37. Altair777 640 17.10.08 16:35 Сейчас в теме
(34) Но здесь он не нужен. Я не объявляю глобально ВСЕ справочники
41. keleg 322 17.10.08 16:50 Сейчас в теме
(37) Тогда сразу встает вопрос - по какому принципу отбираются справочники автором кода? На этот вопрос долна ответить структура, их объединяющая.
И логично в коде завести список этих справочников, и обозвать его чем-то типа "СписокСправочниковПоСкладам", по этому списку уже создать объекты для доступа к этим справочникам.
45. Altair777 640 17.10.08 16:59 Сейчас в теме
(41) > И логично в коде завести список этих справочников, и обозвать его чем-то типа "СписокСправочниковПоСкладам", по этому списку уже создать объекты для доступа к этим справочникам.

Это однозначно было бы больше строк кода, чем при явном Создание Объекта + циклы ненужные

Или для гибкости завести справочник, в котором бы хранились идентификаторы спровочников, которые должны инициализироваться ПриНачалеРаботыСистемы? :-)
И вместо того, что бы смотреть код в Конфигураторе, надо было еще и Предпрятие открыть и там посмотреть КАКИЕ имегно справочники глобально объявляются?
67. Altair777 640 18.10.08 01:15 Сейчас в теме
Вопрос к keleg... Вы на 1С программировать умеете? :-)
Вообще, и на v.7, в частности? Я имею в виду с достаточной квалификацией, разумеется
в (30) Вы, например, пишите > потому не уверен, возможен ли в 7ке цикл по метаданным.
Но это не мешает Вам обзывать язык, успешно выдержавший на рынке не один год, и еще пяток продержится.
Между прочим, некоторые бухи еще в 6-ке работают :-)

Пока Вы где-то нахватались сомнительных утверждений, типа - процедура должна быть не больше 10 строк и пытаетесь ввести это в догму.

(60) > ЧеБурашка, нормальные среды программирования (и 1с8 в том числе) позволяют бегать от названий процедур к их реализации (F12 -Alt+-) и поэтому навигация здесь становится прозрачной и автоматической.
в (61) Вам объяснили, что 7-ка это умеет. Значит, она нормальная среда программирования? :-)
78. artbear 1186 20.10.08 08:37 Сейчас в теме
(67) Altair777
Зря наезжаешь на автора по поводу количества строка кода :(
1. Все им сказанное насчет этого - это не догма, а некое правило, при соблюдении которого получаешь более простой и читабельный код.
2. Весь смысл рефакторинга как раз в получении кода, который очень легко читать, понимать, изменять/сопровождать.
Выделение неких смысловых кусков кода и оформление их на классы/методы/процедуры/функции с удобными и понятными названиями - одно из главных правил рефакторинга.
Нет смысла заглядывать внутрь процедуры, если из названия и так понятно, что она(процедура) делает.
Очень часто хороший код и не нуждается в комментариях, все понятно из названий идентификаторов :)
3. Например, по твоему коду из ПриНачалеРаботыСистемы из (22) проще написать
Код
Процедура ПриНачалеРаботыСистемы()
  ИнициализацияСистемыКонтроляДоступа();
  Если УстановкаТекущегоПользователя() = 0 Тогда
     СтатусВозврата(0);
     Возврат;
  КонецЕсли;
КонецПроцедуры
Показать полностью

В итоге тому, кто читает код этого метода, становится очень легко понять, что этот метод выполняет, без всяких лишних подробностей, только засоряющих экран.
84. Altair777 640 20.10.08 10:13 Сейчас в теме
(78) Да, я наезжаю на автора по поводу количества строк.
Именно количества. В комменте 20 я предложил другое толкование. Вы его читали?
Я использую разбиения кода на процедуры, но не отсчитывая по 10 строк, а разбивая по смыслу.

П.С. А давайте сделаем небольшой подсчет.
Дано 1000 строк кода
Разбиваем его на 100 процедур.
Получаем 1300 строк (Исходных 1000 + в каждой из 100 Процедур Процедура/КонецПроцедуры + 100 строк вызова процедур).
А для вызова 100 процедур нужно написать еще 10 процедур - получаем 1320 строк (кажись, нигде не просчитался :-) ).
На самом деле, это минимальные расчет. Может, кому-то захочется более смысловые процедурки писать по 5-7 строк
Лично мне кажется, что такой арифметический подход к разбиению на процедуры отрицательно скажется на понимании и быстродействии.
85. artbear 1186 20.10.08 10:51 Сейчас в теме
(84) 1. Лично я при прочтении статьи автора и его ответов не увидел того, что это арифметический подход. ИМХО автор понимает/говорит, что подобное правило носит только рекомендательный характер, и главное, это смысловое содержание и удобство чтения кода.
.
2. (20) Конечно, читал. Этот пост и его резюме мне также не нравится :(
Еще раз повторюсь - главное, это смысловое содержание и удобство чтения кода.
.
3. Сравни, плиз, свой код из (22) и мой рефакторинг этого кода из (78).
Какой код легче прочесть и быстрее понять ? :)
.
Также прошу других участников высказаться по поводу этих 2-х вариантов одного кода :)
.
4. Не в обиду, но желательно тебе все-таки прочесть какую-нибудь книгу по рефакторингу. Рекомендую Фаулера "Рефакторинг" - это базовые знания по построению кода.
Почитай, думаю, что многое станет проще и легче понять.
DMSDeveloper; +1 Ответить
86. Altair777 640 20.10.08 11:01 Сейчас в теме
(85) по поводу п.3 согласен, это сырая заготовка, так что опрос проводить не стоит :-)

по п.1 > Блок кода длиннее 7-10 строчек должен оформляться в отдельную процедуру или функцию, с названием, которое описывает, что, собственно, этот блок делает.
Где-то там есть слово смысл?

по п.2 А я разве спорил с этим? Наоборот :-)

по п.4 Спасибо, обязательно. Как только будет время...
24. Vitek 17.10.08 16:09 Сейчас в теме
(21)А кто такой этот Малюгин Дмитрий?
есть сомнения насчет его авторства указанной фразы :)

На самом деле это один из принципов структурного программирования. Если я ничего не путаю это еще с Вирта пошло.
26. JohnyDeath 297 17.10.08 16:13 Сейчас в теме
(24) директор http://www.kint.ru/
Может, конечно, и не он первый это сказал. Я этот принцип услышал от Константина (ака 33lab, noprogrammer).
27. Altair777 640 17.10.08 16:15 Сейчас в теме
Насчет того, что нужно структурировать код согласен на все 100%
Но... надо же и чувство мерки иметь. Догм быть не должно.
Отсчитал 10 строк - новая процедура, отсчитал 10 строк - новая процедура, отсчитал 10 строк - новая процедура... и т.д.?

(21) to JohnyDeath. У вас во dсех процедарах и функциях не более 10 строк?
Хотелось бы увидеть Ваш глобальный модуль, оформленный по этому принципу :-)
29. Vitek 17.10.08 16:18 Сейчас в теме
(27)Ты не понял...Это рекомендации, а не правила. Жестко выполнять их необязательно. Это как этика в обычной жизни, хороший стиль, воспитание.
DMSDeveloper; +1 1 Ответить
31. Altair777 640 17.10.08 16:27 Сейчас в теме
(29) Слов нету... одни выражения
> Это как этика в обычной жизни, хороший стиль, воспитание
Тот, кто пишет в одной процедуре более 10 строк, - неэтичен и плохо воспитан?
32. Altair777 640 17.10.08 16:31 Сейчас в теме
(31) И сколько секунд у Вас ушло на то, что бы понять в чем суть этого куска кода? :-)
А если бы всесто этого пришлось посмотреть от 3 до 5 процедур с циклами?
36. Vitek 17.10.08 16:34 Сейчас в теме
(32)>А если бы всесто этого пришлось посмотреть от 3 до 5 процедур с циклами?
А зачем их все смотреть то? Ну есть они где то там, что то делают. Если из названия процедуры понятно что она делает, то зачем смотреть ей в код?
JohnyDeath; +1 Ответить
38. keleg 322 17.10.08 16:36 Сейчас в теме
(32) Честно говоря - до конца не понял.
А процедуры не нужно смотреть, чтоб понять, что они делают.
Это должно описывать их название - Вы ж не лазите в толковый словарь, когда читаете текст?
В этом-то и фокус.
92. Altair777 640 20.10.08 12:13 Сейчас в теме
+91 Мне самому неприятна эта разборка, но неиспирированный выпад Lomok в (29) и прямое оскорбление в (87) не смогла меня оставить равнодушным. Извините все, кроме Lomok.

В (20) я просто предложил свое толкование. Это же коллективное творчество? Или все-таки догма? :-)
Тогда к чему вообще возможность писать комментарии?
134. Altair777 640 21.10.08 14:27 Сейчас в теме
Насчет классиков... Лев Николаевич писал фразы на полстраницы, и ничего, в школе читали :-)

> В хорошем коде
А как понять достаточно ли хорош код? Особенно, если он чужой?
Вот буквально сегодня натолкнулся в базе на новой работе
Код
Процедура Меню()
   Перем Зн;
   
   Меню = СоздатьОбъект("СписокЗначений");
   
   Меню.ДобавитьЗначение(1,"общий");
   Меню.ДобавитьЗначение(2,"общий с задолжностью");   
   Меню.ДобавитьЗначение(3,"по клиентам");   
   
   Если Меню.ВыбратьЗначение(Зн,,,,1) = 0 Тогда      
      Возврат;
   КонецЕсли;
   
   Если Зн = 1 Тогда
      ПланОплат(Зн);      //!!!!!!!!!!!!!!!
   ИначеЕсли Зн = 2 Тогда
      ПланОплат(Зн);      //!!!!!!!!!!!!!!!
   ИначеЕсли Зн = 3 Тогда
      ПланОплат(Зн);      //!!!!!!!!!!!!!!!
   КонецЕсли;
КонецПроцедуры
Показать полностью


> насчет других можно будет уже вести более предметную полемику
А чем моя полемика непредметна? Кое-кто из принципа накинулся на (20). Вопрос почему? Ответьте хоть кто-то
Желательно, предметно :-)

(133) > А тут тебе дают на одной страничке всё.
Что всё? Такого же качества как и "Учебник по 1Сv77 от Казанского государственного университета"?
http://infostart.ru/sites/587/
По поводу некоторых аспектов качества я высказался в (114). Кажется, предметно :-)
135. JohnyDeath 297 21.10.08 14:34 Сейчас в теме
(134) ну ты ж книжки читать не хочешь, тогда на этой страничке для тебя всё.
Мне кажется, что ты уже просто из принципа раздуваешь спор.
136. artbear 1186 21.10.08 14:46 Сейчас в теме
(134) Ну сам же понимаешь, что код не очень хорош :)
Магические значения 1, 2, 3 наверняка используются и в методе ПланОплат.
.
Я бы исправил/отрефакторил его, наверное, так:
1. Для каждой константы (1, 2, 3) заводим спец.переменные-константы с четким наименованием:
Код
чОбщий = 1;
чОбщийСЗадолженностью = 2;
чПоКлиентам = 3;
Показать полностью

2. Преобразую код - это только первое преобразование :)
[/code]Процедура ВыбратьВариантПланаОплат_ЗдесьМожноВставитьНовоеНазваниеСтаройПроцедуры_ПланОплат() // поменяем название
Перем лВариант;

Меню = СоздатьОбъект("СписокЗначений");

Меню.ДобавитьЗначение(чОбщий, "общий");
Меню.ДобавитьЗначение(чОбщийСЗадолженностью, "общий с задолженностью");
Меню.ДобавитьЗначение(чПоКлиентам, "по клиентам");

Если Меню.ВыбратьЗначение(лВариант,,,,1) = 0 Тогда
Возврат;
КонецЕсли;

ЭтоНазваниеЛучшеПоменятьДляБолееТочногоСмысл_Старый_ПланОпла­т(лВариант); // например, ВывестиПланОплатВПечатнуюФорму(лВариант)
КонецПроцедуры[/code]
.
3. Блок кода по созданию меню и выбора из него лучше также вынести в отдельный метод-функцию ВыбратьПланОплат.
.
В итоге будет видно, что исходная процедура выродилась в две строки с вызовом 2-х разных методов. И если данный блок кода вызывается всего лишь один раз, его нужно перенести в место вызова, а процедуру удалить.
.
Вариантов множество :)
137. artbear 1186 21.10.08 14:47 Сейчас в теме
(136)
Код
Процедура ВыбратьВариантПланаОплат_ЗдесьМожноВставитьНовоеНазваниеСтаройПроцедуры_ПланОплат() // поменяем название
Перем лВариант;

Меню = СоздатьОбъект("СписокЗначений");

Меню.ДобавитьЗначение(чОбщий, "общий");
Меню.ДобавитьЗначение(чОбщийСЗадолженностью, "общий с задолженностью"); 
Меню.ДобавитьЗначение(чПоКлиентам, "по клиентам"); 

Если Меню.ВыбратьЗначение(лВариант,,,,1) = 0 Тогда 
Возврат;
КонецЕсли;

ЭтоНазваниеЛучшеПоменятьДляБолееТочногоСмысл_Старый_ПланОплат(лВариант); // например, ВывестиПланОплатВПечатнуюФорму(лВариант)
КонецПроцедуры
Показать полностью

.
ЗЫ блин, как неудобно постить :(
138. artbear 1186 21.10.08 14:51 Сейчас в теме
(134) Цитата:
>> > насчет других можно будет уже вести более предметную полемику
>>А чем моя полемика непредметна?
Зачем фразы вырываешь из контекста? :(
Я специально написал обе фразы в одном предложении "После прочтения книг некоторые вопросы для тебе станут яснее, насчет других можно будет уже вести более предметную полемику."
139. Altair777 640 21.10.08 15:18 Сейчас в теме
(138) Извиняюсь, исключительно чтобы не перегружать комменты.
А насчет выдергивания фраз... с моим (20) такое сотворили.... Чем он плох???
Или будем от количества сстрок плясать все-таки?
141. Altair777 640 21.10.08 15:28 Сейчас в теме
(138) А чем моя полемика непредметна?
142. artbear 1186 21.10.08 15:38 Сейчас в теме
(141) А я не говорил, что она не предметна :)
23. Altair777 640 17.10.08 15:43 Сейчас в теме
+22 это я пишу свою собственную Систему Контроля Доступа К Объектам МетаДанных :-))
47. Altair777 640 17.10.08 17:02 Сейчас в теме
+45 а как вы предлагаете при этом подходе объявлять Глобальные переменные? :-)
51. keleg 322 17.10.08 17:08 Сейчас в теме
(47) а никак :-)
Глобальные переменные -зло, и их можно объявлять только при существенных проблемах с производительностью.
Недаром в последних редакциях 1с торговли (10.3.4 и выше) их изжили практически полностью.
Однако, Вам уже пора читать первоисточники по рефакторингу, т.к. уже начали выходить за рамки статьи :-)))
53. Altair777 640 17.10.08 17:12 Сейчас в теме
54. keleg 322 17.10.08 17:15 Сейчас в теме
Скажу по секрету - при жестком рефакторинге вообще переменные не используются :-) Даже локальные. Потому что в переменной может быть не то значение, которое ясно из ее названия, да и расширять код так легче получается. Но в 1с такое в чистом виде невозможно, поэтому я про это и не писал. Но в большинстве случаев все-таки возможно работать только через стек (через параметры функций)
57. Lyekka 25 17.10.08 17:39 Сейчас в теме
Мне ооочень.. ну ооочень интересно, открывал ли автор 1Совские стандарты разработки конфигураций. Не надо проходить мимо того, что написано до вас, господа.
59. keleg 322 17.10.08 18:36 Сейчас в теме
(57) Изучал и внимательно. По этим принципам и происходил часто отбор методов рефакторинга для этого текста.
Потому как предлагаемое в 1С, например, свертывание длинных именований через точку в одну переменную прямо противоречит классическим принципам рефакторинга, (где все наоборот) и потому этот метод, чтобы не пугать сильно народ, в текст не вошел :-)
58. CheBurator 17.10.08 18:20 Сейчас в теме
> "одна функция должна умещаться на одном экране"
ну и что?
вполне допустима процедура на 500 строк, лишь бы смысловой блок был ясно определен... и вот он как раз бы - умещался на экране... и даже если он не умещается на экране - прозрачность связей и наименований позволяет легко ориентироваться....
..сильнее всего напрягают многоэтажные если....
я например предпочитаю вместо

Цикл
Если Условие Тогда
тралалаля длинное
Иначе
тпрутропурнгавов
КонецЕсли;
КонецЦикла
..
юзать
Цикл
Если Условие Тогда
тралалаля длинное
ПРОДОЛЖИТЬ; //сразу ясно что смысловой блок - закончен, а не продолжается где-то в хвосте цикла
КонецЕсли;

//а тут пишу коомент типа
//сюда попадаем если не нашли подходящей дельты
тпрутропурнгавов
КонецЦикла
60. keleg 322 17.10.08 19:11 Сейчас в теме
ЧеБурашка, нормальные среды программирования (и 1с8 в том числе) позволяют бегать от названий процедур к их реализации (F12 -Alt+-) и поэтому навигация здесь становится прозрачной и автоматической.
Если ФункцияВыбора() тогда
Процедура1()
Иначе
Процедура2()
КонецЕсли

Хочеться подробнее - жмешь F12/

Наверное, следует все-таки в статье подчеркнуть особо, что то, что в ней говорится, применимо в основном к 1с8. С семеркой все в этом смысле плохо, у ней нет навигатора по методам, и, как совершенно уникальное явление, при работе со списками (в том числе с базами данных) не функции возвращают контекст
Результат = объект.функцияПоиска()
а контекст устанавливается процедурой поиска, что убивает нафиг на корню половину методов рефакторинга.

Был когда-то у нас неплохой истребитель И-16. Был он в свое время весьма передовым, но отличался особой техникой пилотирования.
Отличной от всех других истребителей, что в начале войны сыграло нехорошую штуку - И-16 в начале войны уже безнадежно устарел, а переучиваться на новые Як-3 и даже ЛаГГи и МиГи народу было долго и тяжело. Так вот произлошло с 1с7.7 - это неплохая среда, но она настолько вне мэйнстрима программирования, что начавшие программировать в 1с7 программисты потом очень тяжело переходят на другие языки и оказываются постепенно в изоляции.
Меня убил когда-то такой, очень даже неглупый программер с большим опытом работы, который никогда не писал функций и не понимал, зачем они нужны.
PeRom; DMSDeveloper; coder1cv8; +3 1 Ответить
63. Abadonna 3859 18.10.08 00:40 Сейчас в теме
(60)>что начавшие программировать в 1с7 программисты
Все мои знакомые программисты на 7.7 не пытаются сейчас подняться от 7.7 к чему-то выше просто потому, что в свое время они снизошли до 1С до 1С с приличных языков. И в этом отношении для них 8-ка легче - привычнее программить
64. Altair777 640 18.10.08 00:42 Сейчас в теме
(60) > Так вот произлошло с 1с7.7 - это неплохая среда, но она настолько вне мэйнстрима программирования, что начавшие программировать в 1с7 программисты потом очень тяжело переходят на другие языки и оказываются постепенно в изоляции.

ржунимагу!!!
те восьмерочники, котрые есть сейчас они с неба упали уже готовыми программерами 1С v8 и на v.7 никогда не программировали? :-)
82. Altair777 640 20.10.08 09:57 Сейчас в теме
Для Lomok. Не понял, а чем Вам не понравился мой коммент 64?

> 64. Altair777 18.10.2008
>
> (60) > Так вот произлошло с 1с7.7 - это неплохая среда, но она настолько вне мэйнстрима программирования, что начавшие программировать в 1с7 программисты потом очень тяжело переходят на другие языки и оказываются постепенно в изоляции.
>
> ржунимагу!!!
> те восьмерочники, котрые есть сейчас они с неба упали уже готовыми программерами 1С v8 и на v.7 никогда не программировали? :-)
> [-]: Lomok

Объянитесь, плиз, по поводу минуса
87. Vitek 20.10.08 11:02 Сейчас в теме
(82)
Я тоже не понял зачем ты мне минус поставил. Если хочешь хоть заминусуйся, мне пофигу на рейтинг. Минус тебе не за это, а за нежелание слушать и упирание рогами, тебе куча народу в этом треде одно и тоже объясняют, а ты все брыкаешься. Просто я дошел до этого поста и уже не выдержал.

>те восьмерочники, котрые есть сейчас они с неба упали уже готовыми программерами 1С v8 и на v.7 никогда не программировали? :-)
Да, а что? Представь себе, людям имевшим дело с "большими" средами для разработки, гораздо проще разобраться в восмере чем в семерке.
coder1cv8; luns; +2 1 Ответить
88. Altair777 640 20.10.08 11:38 Сейчас в теме
(87) в (31) я задал вопрос про твой оскорбительный выпад в (29), на который ты не смог ничего ответить, и только после этого я минусанул. А ты просто отомстил, потому что соседний коммент Abbadonы ты плясанул, хотя там мысль примерно та же, что и в моем

>тебе куча народу в этом треде одно и тоже объясняют
разве? посмотри уточнение JohnyDeath в (35), Сhe Burashka в (58)

>>те восьмерочники, котрые есть сейчас они с неба упали уже готовыми программерами 1С v8 и на v.7 никогда не программировали? :-)
>Да, а что?
И ни один из них никогда не работал в 7-ке?

И кстати, по поводу рог... так как тебе самому "этика в обычной жизни, хороший стиль, воспитание" (см.29) не присуща...
пнх
89. Vitek 20.10.08 11:48 Сейчас в теме
(88)>на который ты не смог ничего ответить
Знаешь чел, во-первых это форум, я могу ответить через 10 тысяч лет, если тему не сдадут в архив. Во-вторых мне на самом деле по барабану, я тебе ничем не обязан.

А если ты в (29) увидел оскорбление то извини...откуда ж мне знать что народ нынче такой нежный.

Насчет коммента Abbadonы - я плюсую то что мне нравится, это не твое дело.

Сраться с тобой по поводу того, кто что и как сказал, не собираюсь.

>И ни один из них никогда не работал в 7-ке?
А что, это обязательно?

>И кстати, по поводу рог... так как тебе самому "этика в обычной жизни, хороший стиль, воспитание" (см.29) не присуща...
Может и нет, а может и да. Не мне судить. Я такой какой есть, уж извините.

>пнх
А вот это говорит о твоем воспитании. Точнее о длинне аргумента.
91. Altair777 640 20.10.08 12:03 Сейчас в теме
(89) > А вот это говорит о твоем воспитании. Точнее о длинне аргумента.

Просто пытаюсь говорить на одном языке. Опыт внедрения мне подсказывает, что с бухами нужно говорить на языке проводок, сальдо, etc., с производственниками - планов, объемов, сменных заданий и т.д. и т.п.
И, кстати, и в мыслях не было меряться у кого аргмент длиннннннннннннее... Для тебя это идея фикс?
94. Altair777 640 20.10.08 12:50 Сейчас в теме
(89) >А что, это обязательно?
Ну, конечно! :-)
По словам keleg в (60) программисты 7-ки "потом очень тяжело переходят на другие языки и оказываются постепенно в изоляции"
93. Abadonna 3859 20.10.08 12:43 Сейчас в теме
(88)>потому что соседний коммент Abbadonы ты плясанул
Ну честное слово, больше не буду коммментровать :))))))))
Мужики, хватит ругаться!!!!!
Altair777; +1 Ответить
95. coder1cv8 3477 20.10.08 13:18 Сейчас в теме
(82) Я "с неба упал" и чего? ) Никогда на 7.7 ничего не писал... )
96. Altair777 640 20.10.08 14:00 Сейчас в теме
(95) Это я знаю, читал Ваши посты :-)
Это цепочка обсуждения началась в (60) очередным категорическим утверждением насчет негибкости мышления семерочников при переходе на другие языки. Своего рода клеймением, как мне показалось :-)
Как и самих программистов, так и 1С версии 7, выпавшей из некого "мэйнстрима программирования".
Пожалуйста, укажите ссылки на первоисточники с его стандартами и на доказательства несоответствия 7-ки им.
97. coder1cv8 3477 20.10.08 14:06 Сейчас в теме
(96) "Гибкость мышления" от человека зависит, конечно, а не от языка... )
А спор что лучше/хуже бессмысленен, как и все "холивары"...
98. Altair777 640 20.10.08 14:20 Сейчас в теме
(97) вот-вот.. и я про это. Терпеть не могу когда навешивают ярлычки.
Я просто высказал свое мнение, что умение работать в 1С 7 версии не делает программера хуже.
100. Abadonna 3859 20.10.08 14:36 Сейчас в теме
(98)>что умение работать в 1С 7 версии не делает
Мое глубокое убеждение: можно не знать ни одного языка программирования, даже компьютер в глаза не видать никогда, но быть Программистом (есть алгоритмическое мышление и его некоторая нестандратность). А можно знать кучу языков, но при этом остаться простым шифровальщиком (ну не дал Бог!)
hogik; vip; +2 Ответить
102. AVARY 174 20.10.08 18:23 Сейчас в теме
моя поправка к (100): не "шифровальщиком", а кодировщиком, кодером
61. JohnyDeath 297 17.10.08 20:31 Сейчас в теме
Наверное, следует все-таки в статье подчеркнуть особо, что то, что в ней говорится, применимо в основном к 1с8. С семеркой все в этом смысле плохо, у ней нет навигатора по методам, и, как совершенно уникальное
Для конфигуратор 7.7 есть OpenConf и telepat ( http://infostart.ru/profile/1956/projects/1688/ ), которые делают работу в конф-ре НАМНОГО удобнее нежели в 8-ке. (даже таже работа со св-вами и методами объектов через ".") Навигация по методам ещё лучше чем! Например, там можно встать на наименование ф-ии в коде (точнее на её вызов), нажать ctrl+entr и тебя автоматом перекидывает на эту ф-ию! Вообще очень много прелестей нам подарил Саша Орефков (про телепат можно почитать тут: http://script-coding.info/Telepat.html ).
Также для 7.7 есть проект 1с++ ( http://www.1cpp.ru/ ), который предоставляет нам ООП (и не только) для 1С!
В общем не всё так плохо в 7-ке ;)
62. CheBurator 18.10.08 00:30 Сейчас в теме
> Так вот произлошло с 1с7.7 - это неплохая среда, но она настолько вне мэйнстрима программирования,
имхо очередное заблуждение...
цель 7.7 - быть не в мейнстриме программирования, а решать задачи юзеров, быстро и эффективно. В целом 7-ка с этим справляется.
То, что сделано в 8-ке - по сравнению с 7-ой не настолько революционно, чтобы оправдывать НАСТОЛЬКО выросшие аппетиты к железу...
..у меня лично сложилось впечатление, что команда, писавшая клюшки, - куда-то "исчезла" и провести дальшейшее развите эволюционное клюшек - никто не смог... поэтому начали ваять "с нуля" 8-ку... имхо это еще подтверждается тем, что у 8-ки был весьма длительный срок старта... и только только сейчас снеговик выходит на такие позиции, когда в нем появляется что-то действительно новое, что с трудом можно было сделать в 7-ке...
.. резюмируя: в деревне из 30 дворов вполне достаточно ездить на уазике, Камаз там - не нужен...
65. Altair777 640 18.10.08 00:56 Сейчас в теме
2 JohnyDeath, про чувство мерки я уже писал в этом блоге, но Вам это незнакомо
Такая безапелляционность в своих суджениях, мяшко говоря, пугает.
Тем более от человека, который не может прочитать не извратив фразу специально выделенную жирным шрифтом
см. п. 20,21,25, 27,28,30 (в котом Вы, кстати, утверждаете что 7-ку знаете не очень, а в 61 хаете), 35,40,43-47,49,50
70. JohnyDeath 297 18.10.08 13:53 Сейчас в теме
(65) Altair777, оказывается ты тоже читать не умеешь! ;))))
"опаньки" и заморские "сорри" тут не прокатят! Извиняйся. ;))))))))))))
81. Altair777 640 20.10.08 09:49 Сейчас в теме
(70) Я, конечно, дико извиняюсь :-)
83. JohnyDeath 297 20.10.08 09:58 Сейчас в теме
66. Altair777 640 18.10.08 00:58 Сейчас в теме
+65 опаньки... вечер, усталость... сорри, п.60 не JohnyDeath написал
Оставьте свое сообщение
Вопросы с вознаграждением