Современный backend разнообразен, но всё-таки подчиняется некоторым негласным правилам. Многие из нас, кто разрабатывает серверные приложения, сталкивается с общепринятыми подходами, такими как Clean Architecture, SOLID, Persistence Ignorance, Dependency Injection и прочими. Многие из атрибутов серверной разработки настолько заезжены, что не вызывают никаких вопросов и используются бездумно. О некоторых много говорят, но никогда не используют. Смысл остальных же либо неправильно интерпретирован, либо перевран. Статья рассказывает о том, как построить простую, совершенно типичную, архитектуру backend, которая не только может без какого-либо ущерба следовать заветам известных теоретиков программирования, но и в некоторой степени может их усовершенствовать.
Читать полностью »
Рубрика «Проектирование и рефакторинг» - 14
Ортодоксальный Backend
2019-11-05 в 8:01, admin, рубрики: backend, clean architecture, dependency injection, domain-specific language, mvc, ruby, Программирование, Проектирование и рефакторингКризис DDD сообщества
2019-11-03 в 10:22, admin, рубрики: .net, comunity, DDD, dotnext, Анализ и проектирование систем, Проектирование и рефакторингГод назад Максим Аршинов (marshinov) выступил с докладом "Быстрорастворимое проектирование". Отличный доклад, харизматичный спикер, полезные материалы в конце. Этот доклад изменил моё понимание того что я делал — кто из нас не пытался интуитивно применить pipeline-архитектуру? А тут ещё элегантные решения помноженные на DDD! С этого начался мой путь евангелиста предметно-ориентированного проектирования.
Скоро DotNext 2019 Moscow. Как всегда, ждём обзора новых фичей, обмена опытом, best practies, архитектурных решений — за это мы все и любим конференции. В списке докладов вокшоп "Блеск и нищета предметной модели", который обратил моё внимание. Цитата со страницы:
Фаулер и Эванс считают анемичную модель антипаттерном. Однако многие кодовые базы, с которыми доводилось работать спикеру, реализованы в стиле «анемичной» модели. Доклад посвящен сравнению сильных и слабых сторон обоих подходов и не очевидным деталям реализации модели предметной области в парадигме ООП и в функциональном стиле.
Сама постановка заставляет задуматься о том, что в развитии DDD движения наметился кризис. Небольшой разбор дисфункций использования и причинах подобных перекосов под катом.
Deploy SonarQube Server
2019-11-01 в 9:14, admin, рубрики: sonar, sonarqube, Проектирование и рефакторинг, системное администрирование, управление разработкойПривет, читатели!
В данном руководстве хочу изложить пошаговую настройку по развёртыванию платформы для непрерывного анализа и измерения качества кода. Подобных статей в сети достаточно много, но я хочу выделить лишь главное, чтобы все новички с первого раза смогли с ней разобраться.
Вы уже изучили вики, не так ли?
И прежде чем начнём
Хочу, чтобы вы определились, какую версию вам внедрять, ведь с каждым обновлением всё больше и больше плагинов становятся платными, что, естественно, скажется на финансовых затратах или функционале.
В общем — перейдите по этой ссылке и убедитесь сами: plugin version matrix
Согласно документации, сервер и базу данных рекомендуется держать на разных машинках.
Но в песочнице можно потренировать и на одной.
Итак. Я работаю с виртуальными машинками. Подготовил 2 штуки, точнее поднял одну и сделал из неё дубликат.
Под рукой у меня оказался Ubuntu server 18.04.3 LTS.
Изменить имя и ip вы сможете легко и просто с помощью этих команд:
::: change hostname :::
$ hostnamectl set-hostname sonarapp
sudo nano /etc/hostname
sudo nano /etc/hosts
::: change ip ubuntu :::
sudo nano /etc/netplan/01-eth0.yaml
Там найдите знакомые строчки и поменяйте параметры имени машинки и IP адреса.
Работа с ошибками в Go 1.13
2019-10-29 в 13:36, admin, рубрики: error, Go, Анализ и проектирование систем, Блог компании Mail.Ru Group, никто не читает теги, Программирование, Проектирование и рефакторинг
В последнее десятилетие мы успешно пользовались тем, что Go обрабатывает ошибки как значения. Хотя в стандартной библиотеке была минимальная поддержка ошибок: лишь функции errors.New и fmt.Errorf, которые генерируют ошибку, содержащую только сообщение — встроенный интерфейс позволяет Go-программистам добавлять любую информацию. Нужен лишь тип, реализующий метод Error:
type QueryError struct {
Query string
Err error
}
func (e *QueryError) Error() string { return e.Query + ": " + e.Err.Error() }
Программист-защитник сильнее энтропии
2019-10-28 в 8:12, admin, рубрики: best practices, fallback, post mortem, безопасность, Блог компании FunCorp, валидация, высокая производительность, кеширование, надежность, оптимизация, прагматизм, практики, практики программирования, Программирование, Проектирование и рефакторинг, процесс разработки, процессы, Разделение привилегий, разделяй и властвуй, разработка, Совершенный код, стабильность
© Dragon Ball. Goku.
Программист-защитник в любой момент и в любом месте кода ожидает появления потенциальных проблем и пишет код таким образом, чтобы заранее от них защититься. А если от проблемы нельзя защититься, то хотя бы сделать так, чтобы её последствия и влияние на пользователей были минимальными.
Вспоминается эффект FlashForward из голливудских блокбастеров, когда главный герой видит грядущую катастрофу и остаётся предельно спокойным, потому что заранее знает, что она произойдёт, и имеет от неё защиту. Идея защитного программирования в том, чтобы защититься от проблем, которые сложно или вовсе невозможно предвидеть. Программист-защитник ожидает появления ошибок в любом месте системы и в любой момент времени, чтобы предотвратить их до того, как они нанесут ущерб. При этом цель не в том, чтобы создать систему, которая никогда не падает, это всё равно невозможно. Цель в том, чтобы создать систему, которая падает изящно в случае любой непредвиденной проблемы.
Давайте разберёмся подробнее, что входит в понятие «падать изящно».
- Падать быстро. В случае непредвиденной ошибки все операции должны завершаться сразу же, особенно если последующие вычисления тяжёлые или могут привести к порче данных.
- Падать аккуратно. Если возникла ошибка, программа должна освободить все ресурсы, снять локи, удалить временные и наполовину записанные файлы, закрыть соединения. Дождаться завершения критических операций, прерывание которых может привести к непредсказуемым результатам. Либо безопасным способом аварийно завершить эти операции.
- Падать явно и красиво. Если что-то сломалось, сообщение об ошибке должно быть простым, лаконичным и содержать важные детали из того контекста системы, где возникла ошибка. Это поможет команде, которая отвечает за систему, максимально быстро разобраться в проблеме и исправить её.
Инженерный подход к разработке ПО. От теории к практике
2019-10-16 в 7:21, admin, рубрики: model-driven engineering, TLA+, Анализ и проектирование систем, Блог компании Яндекс, Проектирование и рефакторинг, управление разработкойКак проверить идеи, архитектуру и алгоритмы без написания кода? Как сформулировать и проверить их свойства? Что такое model-checkers и model-finders? Что делать, когда возможностей тестов недостаточно?
Привет. Меня зовут Васил Дядов, сейчас я работаю программистом в Яндекс.Почте, до этого работал в Intel, ещё раньше разрабатывал RTL-код (register transfer level) на Verilog/VHDL для ASIC/FPGA. Давно увлекаюсь темой надёжности софта и аппаратуры, математикой, инструментами и методами, применяемыми для разработки ПО и логики с гарантированными, заранее определёнными свойствами.
Это вторая статья из цикла (первая статья тут), призванного привлечь внимание разработчиков и менеджеров к инженерному подходу к разработке ПО. В последнее время он незаслуженно обойдён вниманием, несмотря на революционные изменения в подходе и инструментах поддержки.
Я в одиночку отрефакторил 15 тысяч строк легаси. Это были худшие две недели в жизни
2019-10-15 в 14:22, admin, рубрики: Карьера в IT-индустрии, Проектирование и рефакторинг, рефакторинг, Совершенный код
Несколько месяцев назад я работал в аутстафе. Это не то место, где нужен энтузиазм и вера в великую цель проекта. Меня вместе с командой просто продавали заказчикам, а на митингах было важно, сколько тикетов я закрыл. Приступы перфекционизма — скорее вредная штука для такого места, но я ничего не мог с ними сделать. За один из них я знатно поплатился, попал в адский кранч и провел худшие две недели в моей жизни.
Читать полностью »
Не учите паттерны, учите концепции
2019-09-25 в 17:32, admin, рубрики: паттерны головного мозга, Проектирование и рефакторингДобрый день (или вечер, или утро, в зависимости от того, когда выйдет этот пост).
Я хочу высказаться о элитарной части программирования, и донести, в общем-то, очевидную мысль до начинающих в back-end(и не только) разработке, попутно используя попытку начать писать на Хабре.
Итак
Любой программист с хоть немного хорошим вкусом, начавший программировать по своей воле, после понимания основ языка и написания первых проектов, будет задаваться вопросом не «как сделать что-то», а «как сделать что-то правильно» и «какие тут есть стандарты красоты».
Читать полностью »
О важности подтверждения управляющих команд на примере Делимобиля
2019-09-24 в 19:40, admin, рубрики: ack, IoT, Интернет вещей, каршеринг, надежность, Программирование, Проектирование и рефакторингПри проектировании IoT систем, например, каршеринга, очень важно учитывать возможные сбои. В противном случае вас ожидает критическая нагрузка на техподдержку и недовольство клиентов.

Парковка «Сколковская»
Читать полностью »
Рождение платформы
2019-09-19 в 6:23, admin, рубрики: ISPsystem, vepp, администрирование, Анализ и проектирование систем, Блог компании ISPsystem, микросервисы, панель управления хостингом, Проектирование и рефакторинг, сайт, сервер, хостинг
Мир изменился. Я чувствую это в воде, вижу в земле, ощущаю в воздухе. Всё, что когда-то существовало, ушло, и не осталось больше тех, кто помнит об этом.
Из фильма «Властелин колец: Братство кольца»
В интернете существует 100500 статей и докладов на тему «как мы пилили монолит», и у меня нет желания написать еще одну. Я попробовал пойти немного дальше и рассказать, как изменения технологий привели к появлению абсолютно нового продукта (спойлер: мы писали коробку, а написали платформу). Статья во многом получилась обзорной, без технических подробностей. Подробности будут позже.
Читать полностью »
