Как стать автором
Обновить
3
Карма
0
Рейтинг
Вячеслав Чернышов @xpendence

backend.developer { java, kotlin }

  • Подписчики 79
  • Подписки

Понятнее о S.O.L.I.D

Программирование *Java *Проектирование и рефакторинг *IT-стандарты *
Recovery mode
Большинство разработчиков с разговорами о принципах архитектурного дизайна, да и принципах чистой архитектуры вообще, обычно сталкивается разве что на очередном собеседовании. А зря. Мне приходилось работать с командами, которые ничего не слышали о S.O.L.I.D, и команды эти пролетали по срокам разработки на многие месяцы. Другие же команды, которые следовали принципам дизайна и тратили очень много времени на буквоедство, соблюдение принципов чистой архитектуры, код-ревью и написание тестов, в результате значительно экономили время Заказчика, писали лёгкий, чистый, удобочитаемый код, и, самое главное, получали от этого кайф.

Сегодня мы поговорим о том, как следовать принципам S.O.L.I.D и получать от этого удовольствие.



Что такое S.O.L.I.D? Погуглите — и получите 5 принципов, которые в 90% случаев описываются очень скупо. Скупость эта потом выливается в непонимание и долгие споры. Я же предлагаю вернуться к одному из признанных источников и хотя бы на время закрыть этот вопрос.

Источником принципов S.O.L.I.D принято считать книгу Роберта Мартина «Чистая архитектура». Если у Вас есть время прочесть книгу, лучше отложите эту статью и почитайте книгу. Если времени у Вас нет, а завтра собес — велком.
Читать дальше →
Всего голосов 26: ↑18 и ↓8 +10
Просмотры 38K
Комментарии 37

Java 14: Record, более лаконичный instanceof, упаковщик jpackage, switch-лямбды и текстовые блоки

Программирование *Java *
UPD. Сегодня состоится долгожданный релиз Java 14 — и пусть она не LTS, — новых фич в ней достаточно. Java 14 релизнется в течение нескольких часов — но знакомиться с ней можно уже сейчас.



В Java 14 достаточно изменений, как на уровне написания кода, так и на уровне API, GC и многих других подкапотных штук. Можно с некоторой уверенностью сказать, что если Вы знаете о каких-то суперфишках Kotlin или Python — не переживайте, с большой долей вероятности они скоро появятся в джаве. Во всяком случае, сегодняшний релиз содержит некоторые из них. Но — обо всём по порядку.
Читать дальше →
Всего голосов 24: ↑21 и ↓3 +18
Просмотры 9.3K
Комментарии 26

JOOQ и его кроличья нора. Как выжить без Hibernate

Программирование *Java *
Tutorial
В этой статье я не буду топить за JOOQ. Я предпочитаю Hibernate и всю силу Spring Data JPA, которая за ним стоит. Но статья будет не о них.



Когда мы пользуемся Hibernate и Spring Data JPA, нам не нужно задумываться о внутренних процессах — знай ставь аннотации и пиши правильные имена методов в репозитории — остальное за тебя сделают эти два монстра. В случае в JOOQ, к сожалению для многих, придётся малость напрячься и написать больше, чем findAllByUserId(Long userId).
Читать дальше →
Всего голосов 14: ↑3 и ↓11 -8
Просмотры 18K
Комментарии 23

Spring Cache: от подключения кэширования за 1 минуту до гибкой настройки кэш-менеджера

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



В данном посте я постараюсь объяснить о кэшировании так же просто, как это сейчас понимаю я. Вы узнаете о том, как внедрить кэширование за 1 минуту, как кэшировать по ключу, устанавливать время жизни кэша, и многие прочие штуки, которые необходимо знать, если Вам поручили закэшировать что-то в вашем рабочем проекте, и Вы не хотите ударить в грязь лицом.
Читать дальше →
Всего голосов 9: ↑9 и ↓0 +9
Просмотры 44K
Комментарии 6

Docker: как развернуть фуллстек-приложение и не поседеть

Программирование *Java *ReactJS *
Tutorial
«Нам нужен DevOps!»
(самая популярная фраза в конце любого хакатона)

Сначала немного лирики.

Когда разработчик является отличным девопсом, умеющим развернуть своё детище на любой машине под любой OC, это плюс. Однако, если он вообще ничего не смыслит дальше своей IDE, это не минус — в конце концов, деньги ему платят за код, а не за умение его разворачивать. Узкий глубокий специалист на рынке ценится выше, чем средней квалификации «мастер на все руки». Для таких, как мы, «пользователей IDE», хорошие люди придумали Docker.

Принцип Docker следующий: «работает у меня — работает везде». Единственная программа, необходимая для деплоя копии Вашего приложения где угодно — это Docker. Если Вы запустили своё приложение в докере у себя на машине, оно гарантированно с тем же успехом запустится в любом другом докере. И ничего, кроме докера, устанавливать не нужно. У меня, к примеру, на виртуальном сервере даже Java не стоит.
Читать дальше →
Всего голосов 19: ↑13 и ↓6 +7
Просмотры 71K
Комментарии 39

Apache Kafka + Spring Boot: Hello, microservices

Программирование *Java *
Tutorial
Привет, Хабр! В этом посте мы напишем приложение на Spring Boot 2 с использованием Apache Kafka под Linux, от установки JRE до работающего микросервисного приложения.

Коллеги из отдела фронтэнд-разработки, увидевшие статью, сетуют на то, что я не объясняю, что такое Apache Kafka и Spring Boot. Я полагаю, что всякий, кому понадобится собрать готовый проект с использованием вышеперечисленных технологий, знают, что это и зачем они им нужны. Если для читателя вопрос не праздный, вот отличные статьи на Хабре, что такое Apache Kafka и Spring Boot.

Мы же обойдёмся без пространных объяснений, что такое Kafka, Spring Boot и Linux, а вместо этого запустим Kafka-сервер с нуля на Linux-машине, напишем два микросервиса и сделаем так, чтобы одно из них посылало сообщения на другое — в общем, настроим полноценную микросервисную архитектуру.



Пост будет состоять из двух разделов. В первом мы настроим и запустим Apache Kafka на Linux-машине, во втором — напишем два микросервиса на Java.
Читать дальше →
Всего голосов 11: ↑9 и ↓2 +7
Просмотры 70K
Комментарии 3

Spring Annotations: магия AOP

Программирование *Java *
Сакральное знание о том, как работают аннотации, доступно далеко не каждому. Кажется, что это какая-то магия: поставил над методом/полем/классом заклинание с собачкой — и элемент начинает менять свои свойства и получать новые.

image

Сегодня мы научимся волшебству аннотаций на примере использования Spring Annotations: инициализация полей бинов.
Читать дальше →
Всего голосов 9: ↑8 и ↓1 +7
Просмотры 11K
Комментарии 4

ModelMapper: путешествие туда и обратно

Программирование *Java *
image

По известным причинам, бэкенд не может отдавать данные из репозитория как есть. Самая известная — сущностные зависимости берутся из базы не в таком виде, в котором их может понять фронт. Сюда же можно добавить и сложности с парсингом enum (если поля enum содержат дополнительные параметры), и многие другие сложности, возникающие при автоматическом приведении типов (или невозможности автоматического их приведения). Отсюда вытекает необходимость в использовании Data Transfer Object — DTO, понятном и для бэка, и для фронта.
Читать дальше →
Всего голосов 11: ↑11 и ↓0 +11
Просмотры 47K
Комментарии 10

Java 11: новое в String

Программирование *Java *
Всем привет! С момента выхода Java 11 прошли сутки, и вот уже наконец стали появляться первые обзоры релиза. Я же посвящу свою небольшую статью незаметному для официальных релизов и потому обделённому вниманием обновлению класса String, тем более, что оно не упоминается в официальной документации 11-й Java (я, во всяком случае, там информации об этом не нашёл).

Действительно, если мы заглянем в класс String, то среди множества знакомых нам методов мы найдём несколько, помеченных как "@since 11". И да, официально в Java они появились только вчера.
Читать дальше →
Всего голосов 26: ↑26 и ↓0 +26
Просмотры 32K
Комментарии 50

Абстрактный CRUD от репозитория до контроллера: что ещё можно сделать при помощи Spring + Generics

Программирование *Java *
Совсем недавно на Хабре мелькнула статья коллеги, который описал довольно интересный подход к совмещению Generics и возможностей Spring. Мне она напомнила один подход, который я использую для написания микросервисов, и именно им я решил поделиться с читателями.



На выходе мы получаем транспортную систему, для добавления в которую новой сущности нужно будет ограничиться инициализацией одного бина в каждом элементе связки репозиторий-сервис-контроллер.
Читать дальше →
Всего голосов 11: ↑9 и ↓2 +7
Просмотры 22K
Комментарии 25

Optional: Кот Шрёдингера в Java 8

Программирование *Java *
Tutorial
Представим, что в коробке находятся кот, радиоактивное вещество и колба с синильной кислотой. Вещества так мало, что в течение часа может распасться только один атом. Если в течение часа он распадётся, считыватель разрядится, сработает реле, которое приведёт в действие молоток, который разобьёт колбу, и коту настанет карачун. Поскольку атом может распасться, а может и не распасться, мы не знаем, жив ли кот или уже нет, поэтому он одновременно и жив, и мёртв. Таков мысленный эксперимент, именуемый «Кот Шрёдингера».



Класс Optional обладает схожими свойствами — при написании кода разработчик часто не может знать — будет ли существовать нужный объект на момент исполнения программы или нет, и в таких случаях приходится делать проверки на null. Если такими проверками пренебречь, то рано или поздно (обычно рано) Ваша программа рухнет с NullPointerException.
Читать дальше →
Всего голосов 28: ↑20 и ↓8 +12
Просмотры 161K
Комментарии 50

QueryDSL: Предикаты

Программирование *Java *
QueryDSL Predicate — это мощный и чрезвычайно гибкий инструмент для работы с БД и просто подарок для Java-разработчиков, которые не очень хорошо разбираются в SQL (или совсем не разбираются), поскольку предикаты позволяют работать с БД при помощи привычного объектного представления сущностных зависимостей.



Предикаты позволяют работать с элементами базы данных как с обычными полями класса. При сборке gradle создаёт специальные классы зависимостей, через которые и происходит поиск нужных записей в БД.
Читать дальше →
Всего голосов 13: ↑11 и ↓2 +9
Просмотры 30K
Комментарии 8

Настройка валидации DTO в Spring Framework

Программирование *Java *
Всем привет! Сегодня мы коснёмся валидации данных, входящих через Data Transfer Object (DTO), настроим аннотации и видимости — так, чтобы получать и отдавать только то, что нам нужно.

Итак, у нас есть DTO-класс UserDto, с соответствующими полями:

public class UserDto {

    private Long id;
    private String name;
    private String login;
    private String password;
    private String email;
}

Я опускаю конструкторы и геттеры-сеттеры — уверен, вы умеете их создавать, а увеличивать в 3-4 раза код смысла не вижу — представим, что они уже есть.

Мы будем принимать DTO через контроллер с CRUD-методами. Опять же, я не буду писать все методы CRUD — для чистоты эксперимента нам хватит пары. Пусть это будут create и updateName.
Читать дальше →
Всего голосов 8: ↑8 и ↓0 +8
Просмотры 33K
Комментарии 22

Spring MVC — основные принципы

Программирование *Java *
Перевод


Фреймворк Spring MVC обеспечивает архитектуру паттерна Model — View — Controller (Модель — Отображение (далее — Вид) — Контроллер) при помощи слабо связанных готовых компонентов. Паттерн MVC разделяет аспекты приложения (логику ввода, бизнес-логику и логику UI), обеспечивая при этом свободную связь между ними.

  • Model (Модель) инкапсулирует (объединяет) данные приложения, в целом они будут состоять из POJO («Старых добрых Java-объектов», или бинов).
  • View (Отображение, Вид) отвечает за отображение данных Модели, — как правило, генерируя HTML, которые мы видим в своём браузере.
  • Controller (Контроллер) обрабатывает запрос пользователя, создаёт соответствующую Модель и передаёт её для отображения в Вид.
Читать дальше →
Всего голосов 10: ↑7 и ↓3 +4
Просмотры 212K
Комментарии 10

Работа с сервлетами для чайников. GET / POST

Программирование *Java *
Tutorial


В прошлой статье Создание сервлетов для чайников. Пошаговое руководство я описал, как создать сервлеты и попытался объяснить, как это работает. В этой статье мы научим наши сервлеты работать с UI через HTTP-запросы GET и POST.

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

  • GET — обрабатывает адресную строку, которая получается при вызове сервлета. Например, site.com/example?action=test&id=10&admin=true
  • POST — обрабатывает загруженный контент (картинку, файл, строки, объектные данные), в общем, всё, что можно передать через HTTP

В Java-сервлете запросы POST и GET обрабатывают соответствующие методы doPost(); и doGet().
Читать дальше →
Всего голосов 9: ↑5 и ↓4 +1
Просмотры 74K
Комментарии 6

Создание сервлетов для чайников. Пошаговое руководство

Java *
Recovery mode
Из песочницы
image

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

Итак.

Предположим, что Вы уже где-то скачали пример с применением maven и Вам удалось задеплоить Ваш код на Tomcat (с этого обычно начинается познание сервлетов) любым способом (WAR-архивом или прямо из среды разработки). Вы имеете структуру приложения, в которой присутствует файл web.xml. C него и надо начинать создание страниц.
Читать дальше →
Всего голосов 19: ↑13 и ↓6 +7
Просмотры 118K
Комментарии 28

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность