Telegram Web
Поступила идея ответить на следущий вопрос интервьюера: приведите примеры ситуаций, когда нарушение каждой из букв оправдано.

Одна ситуация общая на все: мы чиним упавший прод, на кону деньги / репутация. А дальше попробую привести примеры из более спокойных ситуаций.

S. Принцип единства ответственности. Самый первый приходящий на ум случай оправданного нарушения его - наша бизнес логика предполагает строгую транзакционность операции.

Начали выполнение - добавили запись в БД. Следущий шаг - ещё запись, в другое место.

Если все шаги выполнены успешно - коммитнули транзакцию.

Разумеется, можно делать по фен-шую, с сохранением каждого шага и его компенсацией в случае неудачи операции в целом. Но это уже сложная логика, требующая поддержки и какого-то централизованного подхода на уровне проекта.

А можно поступить проще: получить контекст ORM-ки на старте операции, по ходу вносить туда изменения. В случае, если дошли до финала - вызвать у контекста SaveChanges. А если что-то завалилось по пути - транзакция будет откачена, как будто ничего и не было.

#собес
#solid
👍7
А вообще, мы в отпуске. Стартовали вчера в составе жена, я, два ребенка - 6 и 3.5 лет и племянница 14 лет. Мы поехали на машине в Мурманск и окрестности. Первый перегон - Москва - Волхов. Заночевали в посуточно сдающейся квартире. Несмотря на неказистый вид дома позапрошлого века постройки, для квартиры за 2тыс/сутки прям отлично. И детям громить особенно нечего:)

Отдельно порадовал бесконтактный заезд: ключ был хорошо спрятан на территории у дома, уже думал что будет ненаход.

#отпуск
7
Перейдем к ситуациях, когда допустимо попирать следущую букву.

O. Принцип открытости-закрытости: классы должны быть открыты для расширения, но закрыты для модификации.

Оправдано нарушение этого принципа в случае, когда- наш проект не планируется активно дорабатывать.

Предположим, мы выполняем функции паллиативной поддепдки легаси проекта, который в обозримой перспективе будет отключен. Лучше писать как проще, чем умножать сущности изящными решениями. А чтобы не возникало искушения творческого использования написанных нами заплаток - запрещаем наследование классов, делая их sealed.

Другой вариант - наш проект - платформенное решение. Мы его делаем, тщательно фиксируем работоспособное состояние тестами, после чего распространяем между коллегами как инструмент, облегчающий решение каких-то типовых задач. Приоритет в таком случае произволительность и стабильность, а не академически правильный код. Изменения в проект вносятся крайне редко, во основном - багфиксы. Один такой мой проект уже года 2 крутится без багов и доработок.

#собес
#solid
🔥4
Перейду к описанию кейсов, когда нарушение принципа, соответствующего следующей букве в аббревиатуре #solid оправдано.

L. Принцип подстановки Барбары Лисков: объекты в программе должны быть заменяемы их наследниками без изменения корректности программы.

Первый кейс напрашивается сам собой: ломать совместимость нужно тогда, когда нужно, а когда не нужно - не стоит, если на то есть технические или бизнесовые основания.

У нас есть некоторая апишка, часть методов которой приговорена к удалению. Для походов в нее используется внутренний пакет, скрывающий от подключивших его всю инфраструктурную кухню.

Хорошим тоном перед реальным удалением методов будет выпустить пакет с новой реализацией обращений к апишке, который вместо выполнения работы будет кидать исключения.

Этот пакет может быть использован как инструмент для подготовки к полному удалению методов: легко искать места, которые нужно доработать, при этом, в случае проблем, всегда можно быстро откатиться на прошлую версию и взять паузу.

Второй кейс: поломка корректности работы программы в целом нам не критична. Например - мы собираем какой-то стенд, имитирующий работы части нашей системы для тестирования (нагрузочного, регрессионного или ещё какого-то - не важно). В данном случае нам нужна корректная работа только той части методов, тестирование которой предусмотрено тест планом.

#собес
👍1
Сразу после пробуждения упаковались, посмотрели на миниатюрную Волховскую ГЭС и отправились в Карелию. Десять лет назад мы уже были тут, это было наше первое автомобильное путешествие.

Как и в прошлый заход мы отправились на берег Сямозера в зоокомплекс "Три медведя". Показали детям мишек и прочих наших зверей, погладили волкособа (гибрид волка и собаки), помочили ноги в морском прибое Сямозера. Покушали на турбазе и заночевали в Петрозаводске.

Город на первый взгляд изменился мало, только поехали современные троллейбусы. А вот Карелия в целом изменилась за десять лет сильно: вместо забытой богом глухомани она стала туристическим центром. Берега озер обрасли турбазами и кемпингами, по дорогам снуют внедорожники с лодками на прицепах.

Выложу видео сямозерского прибоя и немного зверей из зоокомплекса.

А теперь движемся дальше: север ждёт!

#отпуск
🔥11
Пришел через нарушить следущий из принципов #solid - буковку I - Interface segregation - принцип разделения интерфейсов, который я иллюстрировал вышел.

Рассмотрим ситуацию: мы - банк. У нас много денег и высока цена ошибки. Айти огромное, а системы крайне сложны.

Мы можем принять волевое решение: любое действие оборачиваем в абстракцию "операция", OperationBase, для упрощения разработки которых платформенными командами пишется внутренний фреймворк.

Итого на выходе мы имеем шаблон, в котором предусмотрено единообразным способом:
1. Логирование ошибок и основных этапов, система метрик, трассировка используемых запросов.
2. Простой механизм использования кэша, скрывающий особенности реализации: методы Put и Get
3. Механизм для проведения и отката распределенной транзакции.
4. Механизм увязывания операций в цепочки.
5. Механизм авторизации и аутентификации.

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

Ценой ощутимой избыточности, мы получаем полностью прозрачную систему, относительно простую в поддержке. При переходе разработчика между направлениями осознание происходящего происходит намного быстрее.

Открываем код операции и сразу видим: кэш используется с такими-то политиками, распределенных транзакций не предусмотрено, логи искать по такому-то ключу, бизнес логика лежит в заранее отведённом месте, начинаем изучать.

#собес
👍3
Сегодня совершили переезд из Петрозаводска за полярный круг, в окрестности Кандалакши.

По пути посетили занятный арт-объект в Петрозаводске - памятник карельскому комару, сделанный из трактора.

Следом заехали к водопаду Кивач, где посмотрели вблизи на гнезда ласточек (дети в восторге), полазили по скалам у водопада и попробовали необычное мороженое. Оказалось, что мороженное с рыбьей икрой - это реально вкусно. Остальные вкусы (икра морского ежа и морские водоросли) так себе.

А потом был долгий преезд мимо скал, болот, озер и небольших бурных речек. Во время одной из остановок был найден первый в этом сезоне гриб: подосиновик.

Заночевали в придорожном мотеле чуть недоезжая Кандалакши. При заселении меня попросили расписаться за пожарную безопасность (!) и стребовали согласия на обработку персональных данных от всех членов экипажа.

#отпуск
🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
Оставив расцветающую в Кандалакше сирень позади, мы продолжили наш путь на север. В какой-то момент дети попросили размять ноги и поискать грибы, ну мы и съехали на берег реки Пиренги.

У воды я услышал шум, характерный для водопада или порога. Вскоре мы нашли источник шума: за заброшенным поселком мы обнаружили сброс воды с плотины. Полюбовавшись артефактом мертвой цивилизации и бурным потоком воды мы двинулись дальше.

#отпуск
🔥3👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Следующей нашей остановкой стал город металлургов Мончегорск. Земля вокруг города полумертвая от деятельности человека, ни травы, ни мха, ни лишайников, только кусты вместо обычной растительности лесотундры. Зато в городе очень вкусная столовка "Пышка" и есть смотровая площадка на горке на высоте 360 метров, куда можно заехать на машине.

Вид с горы потрясающий: невысокий хвойный лес на холмах, гладь озер, маленькие коробочки домиков. Но погода была лютая: +4 и ветер от 9 м/с с более сильными порывами, осыпающий полузамерзшими каплями дождя. Сняв пару видео мы спрятались в теплую машину и покатили дальше в сторону Териберки.

P.S. здесь и далее периодически будет реклама автомобиля УАЗ "Патриот" :)

#отпуск
🔥4
Последний этап путешествия - дорога от цивилизованного Мурманска к океану - делится на два этапа. Первый, чуть больше 100 км - обычная извилистая дорога, идущая по холмам в окружении лесотундры. Сосенки, ёлочки, кусты, мхи, все зелено и весело.

Доезжаем до ветряков - Кольской ВЭС - и картина резко меняется: начинается скалистая безжизненная тундра. И дорога резкр превращается в тыкву: на последних 10-20 километрах ее ещё не успели доделать. В придорожных канавах и на дальних горах всё ещё остался снег.

И вот она - Териберка. На въезде все машины встречает териберский часовой (на фото). Поселок производит странное впечатление. Несколько обыденных для России панельных домов, некоторое количество пафосных домиков, гостиниц и ресторанов для туристов и трущобы, иначе не назвать. Гаражи, ветхие домики из почерневших досок, новодел из профнастила.

Где-то жара +30, а у нас +7 (ощущается как -3), ветер 9м/с и только зацветает рябина.

#отпуск
🔥5
2025/07/10 15:48:57
Back to Top
HTML Embed Code: