Как стать автором
Обновить
44.14

Проектирование и рефакторинг *

Реорганизация кода

Сначала показывать
Порог рейтинга
Уровень сложности

Мой опыт перевода Grafana под управление Terraform или что делать если надоело тыкать на кнопки в GUI

Уровень сложности Средний
Время на прочтение 21 мин
Количество просмотров 508
IT-инфраструктура *Проектирование и рефакторинг *DevOps *
Туториал

Вам сказали развернуть систему мониторинга, вы выбрали связку Prometheus + Grafana. Развернули Grafana на своих серверах (VM/Docker/Kubernetes) и подключили Data Source Prometheus (а возможно вам еще сказали развернуть логирование и вы используете Grafana Loki) и далее по гайдам из ютуба начали создавать свои дашборды и настраивать алерты.

Все работает идеально, но в один момент вы начинаете думать о том, чтобы хранить созданные сущности Grafana в коде, чтобы их можно было легко восстановить в случае потери данных или же развернуть при создании новой среды (dev/prod). Экспортировать дашборды не составит труда, это можно сделать и через GUI, но как же источники данных, политики уведомлении, contact points и сами алерты?

Знакомая история? Возможно, что нет. А у меня да!

Читать далее
Всего голосов 3: ↑3 и ↓0 +3
Комментарии 2

Новости

Абстрактные типы данных. Изложение для начинающих

Уровень сложности Простой
Время на прочтение 10 мин
Количество просмотров 5.5K
JavaScript *Проектирование и рефакторинг *ООП *

Абстрактный тип данных. 

Зачем нужны абстрактные типы данных? Чем они полезны для программиста? Когда необходимо создавать эти абстракции, а когда можно обойтись без них? Тип данных vs абстрактный тип данных vs структура данных.

Читать далее
Всего голосов 11: ↑10 и ↓1 +9
Комментарии 0

Уменьшаем количество багов в коде расширяя возможности статического PHP анализатора Psalm

Уровень сложности Простой
Время на прочтение 7 мин
Количество просмотров 895
Разработка веб-сайтов *Open source *PHP *Программирование *Проектирование и рефакторинг *
Туториал

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

А в конце интересный опрос про использование статических анализаторов.

Читать далее
Всего голосов 6: ↑6 и ↓0 +6
Комментарии 0

Feature Toggles и их применение. История одного проекта

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 1.7K
Блог компании SimbirSoft Программирование *Проектирование и рефакторинг *Управление разработкой *Микросервисы *
Кейс

Привет, Хабр! Представьте: вы – член большой команды среди десятка таких же команд на крупном и зрелом проекте. Казалось бы, все процессы уже выстроены, все масштабные разработки завершены и теперь остается только с наслаждением разрабатывать и дополнять проект новыми интересными фичами.

Гармония и красота.

Но откуда ни возьмись, появляется она – недоработанная масштабная функциональность, словно щупальцами оплетающая все базовые процессы сразу. Как монстр, затаившийся в пещере, она не давала покоя бизнесу вот уже 3 года, и успела  «сожрать» несколько команд разработки. И вот бизнес снова объявил охоту на монстра… а вы оказались в этом отряде самоубийц героев, призванных положить конец бесчинствам чудовища. 

Цели озвучены, задачи поставлены, команда в ужасе собрана. Но вот незадача, поле для сражений одно: либо ваша команда будет монстра рубить, либо остальные команды – семена сажать. И что же делать?

✍️ Итак, рассказываем
Всего голосов 1: ↑1 и ↓0 +1
Комментарии 2

Истории

Как мы планировали повысить версию PHP за месяц, а потратили на это год

Уровень сложности Простой
Время на прочтение 14 мин
Количество просмотров 16K
Блог компании Яндекс PHP *Symfony *Проектирование и рефакторинг *
Кейс

Как и множество больших сервисов, Яндекс Еда основана на микросервисной архитектуре. В общей сложности у нас чуть больше 200 микросервисов. Но есть один сервис, который совсем не микро – легаси-монолит.

Он написан на PHP 7.2 разработчиками разного уровня и в разное время. Мы подумали, что так больше нельзя, и решили навести порядок. В ходе разбирательств выяснилось, что версия языка, на котором всё написано, устарела и уже не поддерживается, что ведёт к рискам безопасности. Делать нечего — мы приняли решение обновиться до 8-й версии.

В этой статье я расскажу, чего стоило нам проапгрейдить монолит, сколько тестов мы сломали и как в этом проекте поучаствовали почти все PHP-разработчики Яндекс Еды. Это интересный и уникальный опыт, которым я хотел бы с вами поделиться. В конце дам несколько советов тем, кто тоже захочет ввязаться в подобную авантюру.

Читать далее
Всего голосов 86: ↑86 и ↓0 +86
Комментарии 45

Структура тестового фреймворка

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 3.6K
Тестирование IT-систем *Python *Проектирование и рефакторинг *IT-стандарты *
Обзор

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

Всем известная организация ISTQB разработала общую схему (архитектуру) компонентов, из которых должен состоять тестовый фреймворк. В этой статье разберем, что это за компоненты и для чего они нужны.

Читать далее
Всего голосов 3: ↑3 и ↓0 +3
Комментарии 0

UML: обзор основных типов диаграмм, диаграмма компонентов. Часть 2

Время на прочтение 4 мин
Количество просмотров 2.5K
Проектирование и рефакторинг *UML Design *Подготовка технической документации *

Хабр, привет! В прошлой статье про UML мы узнали что такое язык моделирования UML, зачем он нужен, основные плюсы и минусы UML, а также рассмотрели диаграмму классов. Сегодня я хочу продолжить тему проектирования процессов и остановиться на диаграмме компонентов.

Читать далее
Всего голосов 4: ↑3 и ↓1 +2
Комментарии 2

«Обновляй меня нежно» — как мы докатились до Feature Toggle

Уровень сложности Простой
Время на прочтение 10 мин
Количество просмотров 1.8K
Блог компании Леруа Мерлен Проектирование и рефакторинг *Управление разработкой *Микросервисы *

Вопрос подготовки релизов и внесения новых изменений стоит перед любыми командами. Но чем масштабнее сфера применения каждого конкретного решения, тем важнее не допустить downtime, связанного с ошибками в новом функционале. В этом посте я расскажу о том, почему нам в Леруа Мерлен потребовалось развивать новый механизм работы с обновлениями, из-за чего не подошел ни один из популярных инструментов и что мы стали делать в итоге. Также мы обсудим различные подходы к организации функций Feature Toggle. Если вы тоже интересуетесь этой темой, приглашаю под кат!

Читать далее
Всего голосов 6: ↑6 и ↓0 +6
Комментарии 9

Рутина продакта: путешествие из ХЗ в ТЗ

Время на прочтение 14 мин
Количество просмотров 6.1K
Блог компании Selectel Проектирование и рефакторинг *Управление проектами *Управление продуктом *Карьера в IT-индустрии

Привет, Хабр! Я Кристина — продакт-менеджер компании Selectel. В статье расскажу, как мы строим гипотезы и проверяем потенциальную полезность и выгоду от фичей до того, как на их реализацию будут потрачены долгие годы.

Статья будет наиболее интересна тем, кто только начинает свой путь в продакт-менеджменте или работает в продуктовой команде разработки и хочет узнать, чем занимаются вечно пропадающие на встречах продакты. Однако, даже если вы уже зрелый продакт, вы с большой вероятностью найдете для себя что-то полезное и применимое в работе.
Читать дальше →
Всего голосов 30: ↑30 и ↓0 +30
Комментарии 7

Книга «Искусство чистого кода»

Время на прочтение 11 мин
Количество просмотров 5.2K
Блог компании Издательский дом «Питер» Программирование *Совершенный код *Проектирование и рефакторинг *Профессиональная литература *
image Привет, Хаброжители!

Большинство разработчиков ПО тратят тысячи часов на создание излишне сложного кода. Девять основных принципов книги «Искусство чистого кода» научат вас писать понятный и удобный в сопровождении код без ущерба для функциональности. Главный принцип — это простота: сокращайте, упрощайте и перенаправляйте освободившуюся энергию на самые важные задачи, чтобы сэкономить бесчисленное количество часов и облегчить зачастую очень утомительную задачу поддержки кода. Автор бестселлеров Кристиан Майер помог тысячам людей усовершенствовать навыки программирования и в своей новой книге делится опытом с читателями.
Читать дальше →
Всего голосов 6: ↑6 и ↓0 +6
Комментарии 3

Менеджеры контекста в Python

Время на прочтение 4 мин
Количество просмотров 3.6K
Блог компании Издательский дом «Питер» Python *Программирование *Проектирование и рефакторинг *Параллельное программирование *
Перевод
Почти десять лет назад я показал краткое введение в менеджеры контекста (пункт 2 здесь) и думал, что стану активнее пользоваться такими менеджерами. Но вспомнил я о них только недавно, на фоне того, как много мне приходилось перенастраивать и очищать тестируемый код при опытах по параллелизму (код получался одновременно неприятным и некрасивым).

Посмотрите спецификацию PEP 343: там описано, что суть менеджеров контекста в следующем: «позволить вычленять в отдельные блоки стандартные варианты использования инструкций try/finally». Мне всегда казалось, что finally тяготеет к обработке исключений. Но это не столько обработка ошибок, сколько очистка. Конечно, вы должны быть в состоянии обеспечить качественную очистку в случае, если выброшено исключение, но её к тому же необходимо обеспечить, несмотря на то, что вы покидаете область видимости. Думаю, здесь мы слишком полагались на вызовы функций как на основную рабочую единицу, что отвлекало нас от области видимости как от более общей концепции. Эта тема особенно интересна в сравнении с временами жизни в Rust.
Читать дальше →
Всего голосов 9: ↑9 и ↓0 +9
Комментарии 0

Принципы SOLID: как писать хорошо масштабируемый и поддерживаемый код

Время на прочтение 7 мин
Количество просмотров 4.7K
Блог компании Нетология Python *Программирование *Совершенный код *Проектирование и рефакторинг *
Перевод

Вам когда-нибудь говорили, что вы пишете плохой код? 

Здесь стыдиться нечего. Мы все пишем несовершенный код, когда только учимся. Хорошая новость в том, что улучшить его — довольно просто, главное — желание. 

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

Существует целый ряд принципов в программировании (я бы даже сказал, что их слишком много), но я расскажу о пяти основных, которые складываются в аббревиатуру SOLID. 

Читать далее
Всего голосов 10: ↑7 и ↓3 +4
Комментарии 11

DTO в Python. Способы реализации

Уровень сложности Средний
Время на прочтение 6 мин
Количество просмотров 4.8K
Python *Программирование *Проектирование и рефакторинг *

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

В этой статье я хочу рассмотреть какие возможности есть у Python для реализации DTO. Начиная от встроенных инструментов, заканчивая специальными библиотеками. 

Из основной функциональности хочу выделить валидацию типов и данных, создание объекта и выгрузку в словарь.

Читать далее
Всего голосов 16: ↑15 и ↓1 +14
Комментарии 4

Ближайшие события

CROC Service Partner Day
Дата 7 сентября
Время 10:00 – 18:00
Место Москва
Okkam. О цене и ценности
Дата 12 сентября
Время 12:00 – 19:00
Место Москва
«Стачка» — IT-конференция
Дата 15 – 16 сентября
Время 09:00 – 18:30
Место Ульяновск
Геймтон DatsOrange от DatsTeam
Дата 15 – 16 сентября
Время 17:00 – 20:00
Место Онлайн
Yandex Scale
Дата 25 – 26 сентября
Время 17:00 – 18:00
Место Москва Онлайн
Business⁢ Day: Retail CPG
Дата 28 сентября
Время 09:50 – 14:00
Место Онлайн
XIX конференция разработчиков свободных программ «Базальт СПО»
Дата 29 сентября – 1 октября
Время 10:00 – 19:00
Место Переславль-Залесский Онлайн
Kokoc Hackathon
Дата 29 сентября – 1 октября
Время 19:00 – 21:00
Место Онлайн
PG Boot Camp Russia 2023
Дата 5 октября
Время 10:00 – 17:00
Место Москва Онлайн
Russia Risk Conference 2023 — 19-я конференция по риск-менеджменту
Дата 25 – 26 октября
Время 10:00 – 19:00
Место Москва Онлайн

Делегирование для ООП (Design Patterns) и самый эффективный способ взаимодействия объектов

Уровень сложности Сложный
Время на прочтение 10 мин
Количество просмотров 6.5K
Программирование *C++ *Проектирование и рефакторинг *ООП *
Мнение
Recovery Mode

 Мне давно хотелось узнать существуют ли программисты, которые понимают «делегирование» в рамках ООП так же, как я.  А когда я случайно обнаружил что в Шаблонах проектирования (Design Patterns) в фундаментальных трудах признанных классиков концепций программирования пропущено описание для Делегирования, у меня появился повод написать эту статью.

Так получилось, что я сначала познакомился с этой техникой на практике разрабатывая DirectShow фильтры и COM-объекты, которые составляют эти фильтры и меня особо не интересовало как все это по-умному называется пока это все прекрасно работает. Проблемы возникают, когда ты пытаешься объяснить кому-то КАК это работает, или когда ты пытаешься предложить кому-то хотя бы попробовать использовать определенную технику программирования. Вот именно при таких попытках у меня получилось сопоставить что то, что я использую очень подходит под определение Design Pattern: Delegation.

Давайте посмотрим будет это поводом посмеяться или задуматься.

Должен предупредить что тем, кто воспринимает чужое мнение по техническим вопросам как оскорбление только потому, что он не согласен с этим мнением, не нужно читать эту статью.

Кто дочитает до конца найдет ответ на вопрос который задает название.

Читать далее
Всего голосов 12: ↑6 и ↓6 0
Комментарии 14

10 open-source-фреймворков для разработки ИИ-ботов

Время на прочтение 6 мин
Количество просмотров 2.2K
Блог компании МТС Программирование *Анализ и проектирование систем *Проектирование и рефакторинг *Искусственный интеллект

Если вы всерьёз заинтересовались созданием ИИ-бота, то вам пригодится набор инструментов для его разработки. Чтобы помочь определиться с правильным решением, Екатерина Саяпина, Product Owner личного кабинета платформы МТС Exolve, сделала небольшой обзор наиболее популярных ИИ-фреймворков.

В статье также пойдёт речь о решениях с функциями распознавания речи. Мы включили в подборку наиболее известные продукты, но если захотите углубиться именно в голосовые технологии, то изучите проекты с 5 тыс. звёзд на GitHub, среди которых DeepSpeech, Leon, Wav2letter и Annyang. Также рекомендуем обратить внимание на Voice API и подобные платформы для гибкой настройки всей цепочки коммуникаций.

Читать далее
Всего голосов 19: ↑18 и ↓1 +17
Комментарии 1

Процесс работы системного аналитика: практическое руководство, примеры и шаблоны

Уровень сложности Средний
Время на прочтение 12 мин
Количество просмотров 9.7K
Анализ и проектирование систем *Проектирование и рефакторинг *Управление проектами *Подготовка технической документации *
Туториал

Лучший способ понять теорию — получить больше опыта в разных проектах. Для системных и бизнес‑аналитиков я постоянно показываю подходы к работе через публикацию разборов задач: БД, API, Интеграции, требования, и все, что связано с проектированием систем.

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

Читать далее
Всего голосов 6: ↑5 и ↓1 +4
Комментарии 3

MVP with Router

Уровень сложности Средний
Время на прочтение 6 мин
Количество просмотров 2.8K
Разработка под iOS *Проектирование и рефакторинг *Swift *

Данная статья - моя попытка разобраться и объяснить архитектурный паттерн MVP with Router.

Про сам паттерн MVP в на просторах интернета можно найти довольно много информации, например по следующей ссылкам:

Архитектурные паттерны в iOS

Архитектурные паттерны в iOS: страх и ненависть в диаграммах. MV(X)

А вот про разновидность данного паттерна, которая решает проблему сборки, возникающую при использовании MVP информации не так уж и много. Давайте попробуем разобраться что такое Router применительно к паттерну MVP, зачем он нужен и как его использовать.

Читать далее
Рейтинг 0
Комментарии 3

История одного рефакторинга

Время на прочтение 10 мин
Количество просмотров 2.3K
Блог компании Сравни Проектирование и рефакторинг *Управление разработкой *Управление продуктом *

Привет, Хабр! Меня зовут Миша и я фронтенд-разработчик в Сравни. Сегодня расскажу историю об одном рефакторинге. Как мы сначала копили джентльменский набор: лишние запросы и библиотеки, спагетти из кода и обещаний, пелена гигабайт в Docker-билде и отсутствие времени даже на размышления. Потом рефакторили, а теперь стараемся не допустить повторения проблем. 

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

Читать далее
Всего голосов 13: ↑12 и ↓1 +11
Комментарии 2

Почему разрабатывать ПО действительно сложно?

Время на прочтение 5 мин
Количество просмотров 3.4K
Блог компании Wrike Программирование *Проектирование и рефакторинг *Управление разработкой *Управление продуктом *

Давайте начнем с тривиального, но неоспоримого факта: программное обеспечение постоянно развивается – устаревает и обновляется, видоизменяется и дает дорогу новому.

Заметным исключением является наборная система TeX, разработанная Дональдом Э. Кнутом (D.E.Knuth). Предполагалось, что эта система должна быть совершенной, но даже в ней можно найти свои недочеты. Тем не менее, это уже отдельная тема для другой статьи.

Читать далее
Всего голосов 20: ↑18 и ↓2 +16
Комментарии 10

Моделирование микросервисов. Часть 3

Уровень сложности Простой
Время на прочтение 3 мин
Количество просмотров 1.9K
Проектирование и рефакторинг *Микросервисы *
Туториал

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

Читать далее
Всего голосов 3: ↑1 и ↓2 -1
Комментарии 0

Вклад авторов