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

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

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

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

Разработка сервиса для публикации препринтов. Архитектурный подход

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров9

Всем привет! Это мой первый пост на Хабре, в котором я бы хотел поделиться процессов разработки своего сервиса для публикации препринтов ScienceArchive.

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

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

Новости

AOP в Golang: как рефлексировать, и почему вам не стоит этого делать

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров2.7K

Я java-программист по профессии и алкоголик go-developer по зову души. И вот в один прекрасный день я подумал о том, что раз уж в Go есть пакет reflect, то должны быть и способы АОП, прямо как в java. Если вкратце, я захотел генерировать обертки для функций в рантайме, позволяя красиво оборачивать логи, мониторинги, трейсинги, и прочие довольно однотипные штуки, по аналогии с тем, как я проделывал это в java.

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

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

Избавляемся от легаси: паттерн «Перехват Событий»

Время на прочтение7 мин
Количество просмотров1.3K

Когда мы постепенно переводим легаси систему на новые рельсы, возникает множество случаев, когда само легаси и то, чем мы его заменяем должны взаимодействовать. Поскольку внесение изменений в легаси — это всегда долго, дорого и сложно, нам нужен механизм, который сможет интегрировать возможности новой системы, минимизируя при этом воздействие на легаси. Разбираемся, как можно использовать паттерн «Перехват Событий», чтобы пересылать их в новую систему.

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

Реализация принципа единственной ответственности на Python

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров6.1K

Привет, Хабр!

Сегодня мы рассмотрим одну из основополагающих концепций SOLID-принципов — принцип единственной ответственности или сокращенно - SRP. Разберем, что такое SRP и как правильно его применять в Python.

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

Истории

MapStruct — смаппь меня, если сможешь

Уровень сложностиПростой
Время на прочтение15 мин
Количество просмотров8.7K

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

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

Книга «Микросервисы и API»

Время на прочтение16 мин
Количество просмотров9.5K
image Привет, Хаброжители!

Простые и понятные API — необходимое условие успеха микросервисных приложений. Хорошо продуманные API гарантируют надежную интеграцию сервисов и помогают упростить сопровождение, масштабирование и дальнейшее совершенствование. Познакомьтесь с паттернами, протоколами и стратегиями, которые помогут вам проектировать, реализовывать и развертывать эффективные микросервисы с REST и GraphQL API.

Книга наполнена проверенными советами и примерами кода на языке Python. Авторы фокусируются на реализации, а не на философии. Изучите проверенные методы проектирования простых в использовании API для микросервисных приложений. Создавайте надежные API микросервисов, тестируйте, защищайте и развертывайте их в облаке, следуя принципам и шаблонам, применимым в любом языке программирования.
Читать дальше →
Всего голосов 5: ↑4 и ↓1+5
Комментарии1

Автоматизация инфраструктуры с помощью Salt

Время на прочтение5 мин
Количество просмотров905

Salt (также известный как SaltStack) — это открытое решение, которое позволяет управлять конфигурациями тысяч серверов и устройств. В основе Salt лежит архитектура "мастер-миньон", где мастер-сервер контролирует и управляет подчиненными миньонами.

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

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

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

Проектирование DWH с помощью Data Vault

Время на прочтение6 мин
Количество просмотров967

Привет, Хабр!

Методология Data Vault была разработана Дэном Линстедом в конце 1990-х годов и предлагает гибкий, масштабируемый и проверяемый способ управления данными. Data Vault сочетает в себе самые лучшие черты нормализованных моделей данных и звездных схем.

В этой статье мы рассмотрим эту методологию и как с помощью нее проектировать DWH на примере.

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

Сбросить балласт. Аккуратное отключение лишних фич

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров7.7K


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

Что тут говорить, если самая простая программа сегодня весит под 100 МБ, как целая операционная система со всем софтом несколько десятилетий назад. Кто-то говорит, что причиной этого является закон Мура и рост производительности процессоров в геометрической прогрессии. В связи с этим даже интересно, каким был бы софт при замедлении CPU в двадцать раз.

Но есть выход из сложившейся ситуации: аккуратное отключение лишних функций в раздувшемся софте.
Читать дальше →
Всего голосов 25: ↑25 и ↓0+36
Комментарии5

Suppgram: open-source служба поддержки на Telegram-ботах

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров3.5K

Однажды ко мне пришли с запросом. Нужно было поднять горячую линию, в которую могли бы обращаться люди и получать ответы на свои вопросы, переписываясь с волонтёрами. Звучит как саппорт-система? Да, потому что это она и есть.

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

Так у меня на руках оказался прототип системы, которая отлично справилась с поставленной задачей и которую я в качестве упражнения аккуратно переписал в open-source проект, который представляю вам сегодня — Suppgram. В статье я расскажу, чем оказались удобны Telegram-боты, как я подошёл к архитектуре проекта и как мне (не?) помогло знание паттернов проектирования.

К подробностям!
Всего голосов 17: ↑17 и ↓0+19
Комментарии4

С++: освобождение ресурсов в деструкторах с использованием вспомогательных функций

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров7.1K

Про освобождение ресурсов в деструкторах с использованием вспомогательных функции


В этой статье мы рассмотрим, как правильно разрушать объекты в ООП программе на языке C++, не выполняя избыточных операций. Этим мы завершим цикл публикаций, посвящённый обзору ошибок в игровом движке qdEngine.

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

UI-дзен: как мы познали гармонию, обновив библиотеку компонентов для дизайн-системы Shoelace

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров1.3K

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

Привет, Хабр! Меня зовут Виктория Марухняк, я дизайнер интерфейса продукта Polymatica Dashboards. Мы разрабатываем BI-платформу, и нам критически важно проектировать простой и удобный интерфейс, чтобы пользователи могли легко строить и читать аналитические отчеты. В этой статье поделюсь своим первым опытом рефакторинга и обновления дизайн-системы и тем, как это помогло нам наладить общение между дизайнерами и разработчиками. Без прикрас и розовых пони.

Дальше много букв и картинок
Всего голосов 7: ↑6 и ↓1+5
Комментарии3

Что разработчик никогда не должен делать

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров28K

Перевод статьи разработчика из Южной Кореи.

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

1) Быть перфекционистом

Ничто не идеально, и я уверен, что «идеального кода» не существует тоже.

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

Читать далее
Всего голосов 44: ↑35 и ↓9+32
Комментарии62

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

Конференция HR API 2024
Дата14 – 15 июня
Время10:00 – 18:00
Место
Санкт-ПетербургОнлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область

Рефакторинг — это как весенняя уборка: никто не хочет её начинать, но все ценят чистоту и порядок после её завершения

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров3.1K

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

Итак, что я имею сейчас? Что стало с кодом, который не рефакторили год? Вопрос риторический, и так понятно, что он превратился в легаси.

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

Читать далее
Всего голосов 12: ↑5 и ↓7+2
Комментарии51

RTMP-поток

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров1.4K

Сегодня мы рассмотрим RTMP-потоки, которые хоть и считаются уже ветеранами среди протоколов передачи данных, но до сих пор остаются частью инфраструктуры видеостриминга.

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

Предметно-ориентированное проектирование (DDD) как математическое моделирование

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров3K

В статье будут проведены аналогии между предметно-ориентированным проектированием и математическим моделированием

С математическим моделированием школьники знакомятся в 7 классе общеобразовательной школы. Грубо говоря, это перевод задачи из неформального человеческого языка на язык математики для последующего её решения.

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

Бегство от реальности: как перестать подгонять свой код под устаревшие шаблоны

Уровень сложностиПростой
Время на прочтение22 мин
Количество просмотров4.8K


Как описать хороший код в трех словах? Исходя из опыта — это код, который [приятно поддерживать и эксплуатировать]. СОЛИД, SOLID, СОЛИД... Редко код ревью обходится без упоминания этих принципов, но для разработчика это не означает ничего хорошего. А что, если я скажу вам, что есть альтернатива? Недавно я наткнулся на одну англоязычную статью в блоге автора по имени Dan North. Он поднимает крайне интересные темы: написание хорошего кода, поддержка кодовой базы, порочные практики следования устаревшим трафаретам. 

Думаю, для каждого программиста не секрет, что не всегда есть время и возможность подгонять свое решение под SOLID. Иногда проще оценивать свой код по шкале «хорошего кода» без трафаретов. Тут, конечно, прибегут некоторые люди, которые будут утверждать, что их проекты не содержат говнокода и легаси... Это все просто побег от реальности, нежелание принимать то, что любые проекты и их кодовые базы — это вечные «макароны». В общем, идеализация разработки, которая ни к чему, кроме душевных страданий, не ведет.

Читать далее
Всего голосов 17: ↑13 и ↓4+14
Комментарии7

Асинхронный веб: WebSocket, Server-Sent Events, Long Polling и Short Polling

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров7.5K

Веб-разработка часто требует реализации механизмов обновления контента на странице в реальном времени. Существуют различные сценарии, где это необходимо, например, отображение прогресса выполнения тяжелых задач на бекенде, обновление каких-либо часто меняющихся данных, будь то курсы валют или мониторинг какой-то активности, чаты, различные уведомления. Эти сценарии объединяет одна общая особенность: источник события необходимости обновления данных находится не на клиентской стороне, поэтому мы хотим получать события с бекенда. В данной статье мы рассмотрим четыре популярных подхода к реализации этой функциональности: WebSocket, Server-Sent Events (SSE), Long Polling и Short Polling.
Мы проанализируем каждый метод, выявим их плюсы, минусы и сложность реализации.

Читать далее
Всего голосов 16: ↑14 и ↓2+17
Комментарии11

Проверка игрового движка qdEngine, часть вторая: упрощение C++ кода

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров3.1K

Ищем баг
В этой статье мы рассмотрим, как статический анализатор PVS-Studio воодушевляет заняться рефакторингом кода. Ведь чем короче, проще и понятнее код, тем меньше в нём ошибок.

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

Мастерим многопоточность: техники и инструменты для Java-разработчиков. Часть 1

Уровень сложностиСредний
Время на прочтение29 мин
Количество просмотров5.3K

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

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

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

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