Region C# хорошо или плохо?
Сегодня нашел еще один аргумент.
Подчищаю либы в свете последних изменению в подсистеме получения данных.
Кода - много.
Исправлений - много. Исправления - многослойные.
Т.е. есть с десяток редакций кода и файлы в разной степени готовности.
Что-то - правлю по минимуму, что-то подгоняю под последние веяния.
Во множестве мест есть инициализация структуры ДатаТабле.
Там - не сложно - выделено в функцию:
- переменная типа ДатаКолумн инициализируется определением колонки
- из переменных формируется массив и разом добавляется к Колумнс таблицы.
Две вещи не устраивают.
1. помещение определения колонки в переменную занимает лишнее время. тесты говорят - существенное.
2. Доступ по имени поля к значению поля в ДатаРов - не самый быстрый - надо индексировать ДатаКолумом.
Не сегодня Я не готов передлать обе вещи.
Переделываю только 1-ю.
Для второй - нужно иметь определения колонок в теле класса.
Но заниматься их использованием для индексации Я сейчас не буду.
Но делать когда-то надо будет. Сейчас - делаю часть подготовки:
- копи-пасте инициализации переменной,
- в полученном куске убирается все лишнее
- кусок помещается в регион
- внутреннее содержимое региона комментится
Получается готовый задел, но он не используется и не мешает.
внутреннее содержимое региона комментится
Если я вижу подобное - убираю немедленно, явно мусор.
Пришлось дебажить код любителя регионов - жуть. Стоишь как перед пропастью.
Обычно то видно что там следующее будет, а с регионами нет, виден вначале текст и только потом все раскрывается и ты попадаешь как бы в новый мир, все нужно искать на экране опять по новому, где был и куда попало.
Ну да, ну да - задел на будущее - явный мусор.
Мы просто с разных позиций на это смотрим.
Ты как единственный разработчик, а я как член команды
Кстати, попутно выявляются и минусы агильной разработки. Нет задач типа "прибрать в коде", значит никто этого делать и не будет.
Нет задач типа "прибрать в коде", значит никто этого делать и не будет.
Значит такая вот у вас "команда", которой на качество своего кода наплевать с высокой башни.
ПО практически никогда не заинтересован в "качестве кода". Две наиболее часто используемые возможности для команды что-то сделать:
1. капать на мозги ПО на каждом рефайнменте и говорить что эту историю можно было бы сделать на 10-20-30-50 процентов быстрее, если почистить код, выбивать себе техническую задачу на рефакторинг.
2. ввести в свой DOD пару правил, вроде "все классы/методы измененные при обработке истории должны соответствовать требованиям для нового кода. Старый код должен быть исправлен."
Значит такая вот у вас "команда"
Вполне возможно что и так, только проблема мне видится гораздо шире.
Вот например, есть файл/класс тысячи так на 3 строк с "большими" регионами внутри, ну или пяток классов в одном файле. Хорошо это или плохо? Ускорится ли производительность разработчиков после того как разнесем регионы или классы в разные файлы? Думаю что до 10% точно не ускорится. Ну или имя класса/намеспасе/функции не правильное.
Сделали исправления, закинули на сервер, на и тут началось... Оказывается есть ветки где правился оригинальный файл и теперь народ просто не может их смержить автоматом, нужно делать всё вручную. А это лишняя потеря времени, а не экономия. Тут то тебя все на дейли и обматерят. Больше уже ни ты ни другие никакого рефакторинга не захотят.
Не думаю что вам проблема видится шире. Скорее она вам как обычно видится чересчур узко - через призму "я так привык, мне так удобно".
Хорошо это или плохо?
Отвратительно. И на одни грабли вы уже наступили лично. Но не заметили. Шанс на то, что один и тот же файл будут править в двух ветках (получая конфликты) понижается, если в нём не будет 3000 строк и 5 классов. Ну а если класс один, то тоже стоит постараться разнести. Разбираться в классе с 3000 строк намного веселее чем в классе с 500 строками. Про кратковременную память и от 5 до 9 объектов слышали?
Ну или имя класса/намеспасе/функции не правильное.
Правильное (соответствующее содержанию) имя класса/функции может ускорить разработку и на 1000%. Вместо 4 часов поисков и выяснений "а почему эта функция называется 'сложитьЧисла' а на самом деле она их перемножает", код правится за 5 минут.
Что за боязнь "мержить вручную"? Две минуты потерять? Или классы настолько загажены, что в них строки по 2 тысячи символов и вообще ничего не понятно?
А что за vcs? В git-е таких проблем нет. Переименуете файл и класс внутри в одной ветке, в другой правите содержимое класса, всё смёржится автоматом.
Больше уже ни ты ни другие никакого рефакторинга не захотят.
Ну, повторюсь, вот такая у вас команда. Которая не умеет мёржить, боится переименовывать и лучше поковыряется в коде с непонятными именами. Вас в Ирландии один завод ждёт :)
Но если вам так удобнее, то кому какое дело - работайте так.
Ты как единственный разработчик, а я как член команды
-----
Извини - не понимаю команду, но могу понять членов...
Когда-то была большая проблема в команде - все писали и никто не хотел отвечать за им же написанный код.
Типа как у вас - получил задание - написал - закинул в СВН/ГИТ/ВСС и... в кассу...
Когда дошло до предела - решили просто - версия в СВН - основная - должна компилятся по выборке.
Крику было много, но в конце-концов начали изменения маркирвать и чужой код не трогать.
И на одни грабли вы уже наступили лично. Но не заметили...если в нём не будет 3000 строк и 5 классов.
про плохое наследство слышали? Что дали то и везем.
Что за боязнь "мержить вручную"?
в две минуты никак не укладывается. С одной стороны АБС, с другой АС, какая сторона правильная? При этом АБС например в строке 50, а АС в строке 250 вместе функцией.
В git-е таких проблем нет
Написать описания шагов для гарантированного получения проблемы?
Ну, повторюсь, вот такая у вас команда
Решения? С текущим составом....
про плохое наследство слышали? Что дали то и везем.
Приходилось, да. "Это моя профессиональная обязанность... Професьон де фуа!" (с) Только задача у меня другая. Что дали то и исправляю. Без мержебоязьни. Вот, в прошлом тикете заменил в интерфейсе (и соответственно всех имплементациях) гуавовский optional на java.util.Optional. Пара конфликтов при мерже решилась за минуту. Никаких проблем.
в две минуты никак не укладывается. С одной стороны АБС, с другой АС, какая сторона правильная? При этом АБС например в строке 50, а АС в строке 250 вместе функцией.
Какой вариант "правильный" надо решать поговорим с другим разработчиком. В первый раз в 2 минуты не уложитесь, не страшно, научитесь. Потом быстрее будет.
То что в одном месте AБС а в другом АБ во-первых не даёт автоматом мёрж конфликта, во-вторых заставляет двух разработчиков поговорить друг с другом, а в третьих вообще может быть правильно.
Написать описания шагов для гарантированного получения проблемы?
Если хотите, да. Так то изменения в строке 50 и 250 мержатся без конфликтов (но могут привести к некомпилируемомоу коду, да)
Решения? С текущим составом....
Повторюсь: "Но если вам так удобнее, то кому какое дело - работайте так."
Так что для начала вы должны всей командой определиться как вы дальше жить хотите. На следующей ретроспективе, например. Если решите что текущее положение дел вас (большинство) не устраивает тогда и поговорим.
"Type" vs "var"
-----
Да нет этой темы. Есть хуливара на тему. А темы - нету.
"Тыпе" - сразу понятно какая функциональность доступна. Ошибки времени компиляции.
"Вара" - фиг его знает что там, но должно работать. Ошибки времени выполнения.
Ошибки времени выполнения меня не устраивают - будет строгая типизация. Все.
Какой вариант "правильный" надо решать поговорим с другим разработчиком.
А с каким именно, как его быстро найти? И это не пара человек в одном офисе.
Только задача у меня другая. Что дали то и исправляю.
Вот именно что задача другая . А что бы вы сделали с членом команды который делает всё по теории правильно, но постоянно создает проблемы другим?
Если хотите, да.
пока по быстрому, что идея была понятна
file1
f1()
{
a+b
}
f2()
{
a*b
}
file2
f2()
{
a*b*c
}
FuncA()
{
...
}
f1()
{
a+b-1
}
Вот жеж...
От предыдущего разработчика мне, единственной в проекте, достались эти регионы. Решарпера нет (да что уж там, даже лицензию на меня приобрести пожмотились). Так вот, я сперва от этих регионов тоже плевалась, ибо понять логику - это пройти пошагово код, и тут постоянные "внезапно открывающиеся регионы" и вопрос в голове "откуда это?!?!". Но за год настолько привыкла к этим регионам, что только прочитав тему, вспомнила, что можно же еще и партиал классы использовать. Сейчас уже не возникает проблем, "где что искать" и "куда пихать новую функцию". Даже автоматически сгенерированные не влом перетаскивать в "привычный" регион!)))
Но если б это была обязаловкой, я б тоже, мягко говоря, удивилась :)