Как стать автором
Обновить
  • по релевантности
  • по времени
  • по рейтингу

26 сентября приглашаем на оффлайн-митап HOT Backend&Web в Краснодаре

PHP *Анализ и проектирование систем *Конференции Микросервисы *
Привет, Хабр! Для всех разработчиков Backend и Web, кто соскучился по живым докладам и плодотворному общению в комьюнити, мы проводим новый митап в Краснодаре — с соблюдением необходимых требований безопасности. Спикеры SimbirSoft и других IT-компаний представят несколько докладов и ответят на вопросы. Ждем 26 сентября, участие бесплатное.

Читать дальше →
Всего голосов 5: ↑4 и ↓1 +3
Просмотры 580
Комментарии 0

Fwdays'20: Node.js Middleware – никогда больше

Разработка веб-сайтов *JavaScript *Node.JS *Конференции
В конце сентября в онлайне прошла конференция JavaScript Fwdays'20 Autumn, на которой я сделал доклад про проблемы мидлваров. После доклада меня почти каждый день просят ссылку на видео. И вот, наконец, его выложили в открытый доступ. Доклад чуть больше часа.

Читать дальше →
Всего голосов 11: ↑7 и ↓4 +3
Просмотры 3.4K
Комментарии 0

Гексагональная архитектура

PHP *Symfony *Laravel *
Перевод
На недавнем Laracon NYC я читал доклад о гексагональной архитектуре. Несмотря на то, что я получил позитивную реакцию слушателей, мне кажется, что остались люди, которые хотели бы получить чуть более полное представление о том, что это такое. Разумеется, с примерами. Это моя попытка расширить тот доклад.

  1. Видео с доклада
  2. Слайды


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



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



Гексагональная архитектура, ни в коем случае не новый подход к разработке с применением фреймворков. Напротив, это всего лишь обобщение «лучших практик» — практик новых и старых. Я обернул эти слова в кавычки, чтобы люди не воспринимали их совсем буквально. Лучшие практики, которые работают для меня, могут не работать для вас — все зависит от задачи и преследуемых целей.



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


Читать дальше →
Всего голосов 20: ↑16 и ↓4 +12
Просмотры 105K
Комментарии 16

Как подружиться с Realm

Блог компании FairBear Java *Разработка мобильных приложений *Разработка под Android *

В этой статье мы хотели бы поделиться опытом использования набирающей популярность библиотеки для хранения данных — Realm. Перед любым проектом вначале разработки встает вопрос что использовать для хранения данных — что-то проверенное или попробовать инструменты из разряда для хипстеров.


image


Мы — небольшой стартап, разрабатывающий детский лаунчер. Хотя мы стартап и у нас небольшая команда, но большое внимание мы уделяем качеству кода. За два года разработки довольно сильно менялись требования, функционал и выбранные нами технологии. Вплоть до того, что мы перешли с полностью нативного приложения на гибридное, на основе Cordova. Также, одним из этих изменений стал переход с BaaS от Facebook'а Parse на Realm. В этой статье мы хотим рассказать о проблемах, с которыми мы столкнулись при переходе на Realm и стоит ли пробовать новые библиотеки, если со старыми уже "подружились".

Читать дальше →
Всего голосов 11: ↑10 и ↓1 +9
Просмотры 14K
Комментарии 15

Новая архитектура Android-приложений — пробуем на практике

Разработка под Android *
Из песочницы

Всем привет. На прошедшем Google I/O нам наконец представили официальное видение компании Google на архитектуру Android-приложений, а также библиотеки для его реализации. Не прошло и десяти лет. Конечно мне сразу захотелось попробовать, что же там предлагается.

Читать дальше →
Всего голосов 17: ↑17 и ↓0 +17
Просмотры 42K
Комментарии 14

Red Architecture — красная кнопка помощи для сложных и запутанных систем

Проектирование и рефакторинг *
Из песочницы


В начале несколько слов о названии, почему Red?


Всё просто. Любому явлению, которое претендует на определённый уровень целостности, необходим идентификатор. На такой идентификатор люди ссылаются в обсуждениях и сразу становится понятно о чём речь. В случае с архитектурой не стоит делать попытку описать в названии суть, любая архитектура это сложная вещь. Поэтому — просто Red!
Читать дальше →
Всего голосов 8: ↑7 и ↓1 +6
Просмотры 5.2K
Комментарии 5

Red Architecture — красная кнопка помощи для сложных и запутанных систем — часть 2 (пример с миллиардом ячеек)

Программирование *Анализ и проектирование систем *Клиентская оптимизация *Проектирование и рефакторинг *
В первой части представлена концепция Red Architecture — подход, упрощающий взаимодействие между компонентами в сложных системах, и предназначенная в первую очередь для клиентских приложений. Для полного понимания текущей статьи необходимо познакомиться с данной концепцией здесь.



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

У нас есть клиетское приложение — редактор таблиц, в нём отображается лист таблицы. Экран у пользователя настолько большой, что на нём помещается 1 000 000 000 (один миллиард) табличных ячеек. Всё усложняется тем, что наш табличный редактор подключен к облаку для возможности совместного редактирования таблицы, поэтому изменения в любой из одного миллиарда ячеек “где-то в облаке” должны быть сразу же отображены нашему пользователю.

Паттерн Red Architecture позволяет реализовать данную функцию просто и с высокой производительностью.
Читать дальше →
Всего голосов 7: ↑6 и ↓1 +5
Просмотры 3.3K
Комментарии 6

Заблуждения Clean Architecture

Блог компании MobileUp Программирование *Разработка мобильных приложений *Проектирование и рефакторинг *Разработка под Android *
Превращаем круги в блоки

­­ 


На первый взгляд, Clean Architecture – довольно простой набор рекомендаций к построению приложений. Но и я, и многие мои коллеги, сильные разработчики, осознали эту архитектуру не сразу. А в последнее время в чатах и интернете я вижу всё больше ошибочных представлений, связанных с ней. Этой статьёй я хочу помочь сообществу лучше понять Clean Architecture и избавиться от распространенных заблуждений.

Читать дальше →
Всего голосов 58: ↑56 и ↓2 +54
Просмотры 283K
Комментарии 198

В разрезе: новостной агрегатор на Android с бэкендом. Разработка под Android: выработка архитектуры

Программирование *Проектирование и рефакторинг *Разработка под Android *
Вводная часть (со ссылками на все статьи)

В водной статье я уже писал о том, что планируемым клиентом для проекта должен стать клиент Android: доступный большой аудитории, лёгкий, функциональный, красивый, быстрый (не приложение, а мечта!). Если с основаниями выбора платформы всё понятно, то с тем как реализовывать на базе неё все перечисленные требования – ясно было далеко не всё.

Ранее разработкой под Android не занимался поэтому достаточно ценными источниками информации для меня являлись:


После изучения указанных источников вопросов с архитектурой Android и взаимодействия их компонентов не осталось. Однако остался один наиважнейший вопрос: какова будет структура самого приложения? Пара примеров и прототипов показала, при росте функционала всё быстро начинало превращаться в «лапшу»:

  • Логика работы с объектами Android (Activity, Preferences, TextView ….) перемешивалась с бизнес-логикой;
  • Объекты хранения фигурировали в коде построения интерфейса;
  • Модульное тестирование превращалось в ад из-за необходимости работы с родными объектами Android и их подмены экземплярами Robolectric;
  • Проверка асинхронного кода была возможна только на устройстве или эмуляторе (по принципу: «запустил-проверил-повторил»).
Читать дальше →
Всего голосов 5: ↑5 и ↓0 +5
Просмотры 5.5K
Комментарии 2

Слои, Луковицы, Гексогоны, Порты и Адаптеры — всё это об одном

Программирование *Анализ и проектирование систем *Проектирование и рефакторинг *ООП *
Из песочницы
Перевод статьи Mark Seemann о популярных архитектурах разработки ПО и о том, что между ними общего.

Один из моих читателей спросил меня:
Вернон, в своей книге «Implementing DDD» много говорит об архитектуре Порты и Адаптеры, как о более продвинутом уровне Слоистой Архитектуры. Хотелось бы услышать ваше мнение на этот счёт.
Если не вдаваться в детали, то в своей книге я описываю именно этот архитектурный паттерн, хотя никогда не называю его этим именем.

TL;DR Если применить принцип инверсии зависимостей к слоистой архитектуре, то в конечном счете получим Порты и Адаптеры.
Читать дальше →
Всего голосов 10: ↑10 и ↓0 +10
Просмотры 31K
Комментарии 9

SOLID

Совершенный код *Проектирование и рефакторинг *ООП *
SOLID критикует тот, кто думает, что действительно понимает ООП
© Куряшкин Виктор

Я знаком с принципами SOLID уже 6 лет, но только в последний год осознал, что они означают. В этой статье я дам простое объяснение этим принципам. Расскажу о минимальных требованиях к языку программирования для их реализации. Дам ссылки на материалы, которые помогли мне разобраться.

Читать дальше →
Всего голосов 53: ↑35 и ↓18 +17
Просмотры 241K
Комментарии 162

Разбор архитектуры VIPER на примере небольшого iOS приложения на Swift 4

Разработка под iOS *Разработка мобильных приложений *Swift *
Tutorial
«У каждого свой VIPER». Автор неизвестен
В данной статье я хотел бы рассмотреть архитектуру VIPER на небольшом конкретном примере, который в того же время показывал всю мощь этой архитектуры и был написан на последнем Swift 4. Для тех, кто хочет сразу глянуть код, не читая всю статью, ссылка на реп в самом низу.


Читать дальше →
Всего голосов 13: ↑13 и ↓0 +13
Просмотры 63K
Комментарии 47

Clean swift архитектура как альтернатива VIPER

Разработка под iOS *Swift *
Из песочницы

Введение


На данный момент существует множество статей про VIPER — clean архитектуру, различные вариации которой в свое время стали популярны для iOS проектов. Если вы не знакомы с Viper, можете прочитать тут, тут или тут.

Я бы хотел поговорить об альтернативе VIPER — Clean Swift. Сlean Swift на первый взгляд похож на VIPER, однако отличия становятся видны после изучения принципа взаимодействия модулей. В VIPER основу взаимодействия составляет Presenter, он передает запросы пользователя Interactor’у для обработки и форматирует полученные от него назад данные для отображения на View Controller:

image
Читать дальше →
Всего голосов 10: ↑10 и ↓0 +10
Просмотры 28K
Комментарии 6

Clean architecture в контексте кроссплатформенной разработки

Разработка под iOS *Разработка под Android *
Из песочницы
Всем привет. В последнее время довольно много статей написано на тему clean architecture. То есть чистой архитектуры, которая позволяет писать приложения, удобные в сопровождении и тестировании. Про саму чистую архитектуру вы можете прочитать в таких замечательных статьях как: Заблуждения Clean Architecture или Чистая архитектура, поэтому не вижу смысла повторять то, что уже написано.
Читать дальше →
Всего голосов 16: ↑13 и ↓3 +10
Просмотры 5.9K
Комментарии 11

Cохранение состояний в android приложениях

Разработка мобильных приложений *Разработка под Android *
Из песочницы
Сегодня я хотел поделиться с вами еще одним подходом сохранения состояния при разработке android приложений. Не для кого не секрет, что наше приложение в фоне может быть убито в любой момент и эта проблема становится все актуальнее с вводом агрессивного энергосбережения – привет Oreo. Также никто не отменял смену конфигурации на телефоне: ориентация, смена языка и т.д. И чтобы открыть приложение из бэкграунда и отобразить интерфейс в последнем состоянии нам нужно позаботиться о его сохранении. Ох уж этот onSaveInstanceState.

onSaveInstanceState

Сколько боли он нам принес.
Читать дальше →
Всего голосов 15: ↑13 и ↓2 +11
Просмотры 10K
Комментарии 12

Книга «App from scratch»

Совершенный код *Проектирование и рефакторинг *ООП *Функциональное программирование *Clojure *

Я написал книгу, предварительный релиз, о создании веб-приложений с нуля.


Я прочитал много книг по программированию, но, часто, после прочтения у меня оставался только один вопрос — Как мне применить эти знания на практике?


Предположим, вы разработчик системы автоматизации, портала или интернет-магазина.
Добавление новой функциональности осложняется наслоениями кода. Запуск тестов занимает полчаса, а релиз — час. Идея о переходе на новую версию фреймворка вызывает нервные подергивания. Вы узнаёте, что PostgreSQL имеет поддержку массивов, jsonb, полнотекстового поиска и lateral join, но ORM не позволяет использовать их в полную силу. Вы прочитали про TDD, но как писать в таком стиле, когда аналитик описывает сценарии, а фреймворк требует создания модели, контроллера и представления?


Как применить SOLID, если сущности наследуют от ORM?


Как избавиться от боли?


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


В какой-то степени книгу можно рассматривать как практический самоучитель по Clojure,
так что знание этого языка не требуется.

Читать дальше →
Всего голосов 11: ↑10 и ↓1 +9
Просмотры 4K
Комментарии 14

Архитектура как бремя

Анализ и проектирование систем *Совершенный код *Проектирование и рефакторинг *ERP-системы *Управление проектами *
Перевод

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


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


В сущности, улучшение кода — дело довольно простое, особенно сейчас, когда движение за мастерство разработки ПО (software craftsmanship) продвигает хорошие практики в командах. Однако изменение стержневых частей систем, ограничений, введенных в самом начале их жизненного цикла, является чрезвычайно сложной задачей.


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


Читать дальше →
Всего голосов 15: ↑14 и ↓1 +13
Просмотры 7K
Комментарии 35

DDD, Hexagonal, Onion, Clean, CQRS… как я собрал всё это вместе

Анализ и проектирование систем *Проектирование и рефакторинг *
Перевод


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

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

С тех пор я всегда чувствовал, что мне нужно восстановить «потерянное» время и узнать как можно больше, как можно быстрее. Поэтому я стал немного увлекаться экспериментами, много читать и писать, уделяя особое внимание дизайну и архитектуре программного обеспечения. Вот почему я пишу эти статьи, чтобы помочь себе в обучении.
Читать дальше →
Всего голосов 27: ↑27 и ↓0 +27
Просмотры 54K
Комментарии 14

Поваренная книга разработчика: DDD-рецепты (3-я часть, Архитектура приложения)

Ruby *Программирование *Анализ и проектирование систем *Проектирование и рефакторинг *Ruby on Rails *

Введение


В рамках предыдущих статей мы выделили область применения подхода и рассмотрели основные методологические принципы Domain Driven Design.


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


WM


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

Читать дальше →
Всего голосов 20: ↑20 и ↓0 +20
Просмотры 26K
Комментарии 0

Микросервисы на Go с помощью Go kit: Введение

Go *Микросервисы *
Перевод

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

Читать дальше →
Всего голосов 20: ↑19 и ↓1 +18
Просмотры 37K
Комментарии 7