Зачем нам вообще изучать Domain-Driven Design? Какая от него польза?
На это есть как минимум 5 причин:
👉 Благодаря разделению на Предметные Области, код становится понятнее.
Код, грамотно декомпозированный по доменам, легче читать и понимать, поскольку он отражает реальные бизнес-процессы. Читая понятный код, мы вырабатываем больше эндорфина и меньше кортизола.
👉 Единый Язык улучшает коммуникации.
Все члены команды, включая бизнес, лучше понимают друг друга, что благотворно сказывается на понимании постановок. Меньше приходится переделывать.
👉 Благодаря Ограниченному Контексту, предметные области проще делить на модули. Это особенно касается больших проектов — маленькими узкоспециализированными компонентами проще управлять.
👉 Инкапсуляция компонентов особенно важна для быстрорастущих систем. Системы, чётко структурированные по бизнес-процессам, дольше смогут выдерживать высокий темп изменений.
👉 Жёсткое структурирование по предметным областям спасёт при слабой или невнятной аналитике. Что позволит нам, разработчикам, дольше выдерживать покер-фейс посреди аналитического хаоса.
https://habr.com/ru/companies/sberbank/articles/781612/
На это есть как минимум 5 причин:
👉 Благодаря разделению на Предметные Области, код становится понятнее.
Код, грамотно декомпозированный по доменам, легче читать и понимать, поскольку он отражает реальные бизнес-процессы. Читая понятный код, мы вырабатываем больше эндорфина и меньше кортизола.
👉 Единый Язык улучшает коммуникации.
Все члены команды, включая бизнес, лучше понимают друг друга, что благотворно сказывается на понимании постановок. Меньше приходится переделывать.
👉 Благодаря Ограниченному Контексту, предметные области проще делить на модули. Это особенно касается больших проектов — маленькими узкоспециализированными компонентами проще управлять.
👉 Инкапсуляция компонентов особенно важна для быстрорастущих систем. Системы, чётко структурированные по бизнес-процессам, дольше смогут выдерживать высокий темп изменений.
👉 Жёсткое структурирование по предметным областям спасёт при слабой или невнятной аналитике. Что позволит нам, разработчикам, дольше выдерживать покер-фейс посреди аналитического хаоса.
https://habr.com/ru/companies/sberbank/articles/781612/
Хабр
Domain-Driven Design: чистая архитектура снизу доверху
Когда мидл-разработчик дорастает до сеньора, его, обычно мучает вопрос: « как правильно писать приложение ?» Понятно, что когда он был джуном, ему давали совсем атомарные задачи и он...
🔥5👍2
system-design-cheat-sheet
При собеседовании на позицию Senior+ во многих компаниях проводят этап System Design. На нем вам нужно показать ваш кругозор и умение проектировать архитектуру. По ссылке ниже репозиторий с краткой выжимкой по теме System Design.
https://github.com/gavr-dev/system-design-cheat-sheet
При собеседовании на позицию Senior+ во многих компаниях проводят этап System Design. На нем вам нужно показать ваш кругозор и умение проектировать архитектуру. По ссылке ниже репозиторий с краткой выжимкой по теме System Design.
https://github.com/gavr-dev/system-design-cheat-sheet
GitHub
GitHub - gavr-dev/system-design-cheat-sheet: System Design cheat sheet
System Design cheat sheet. Contribute to gavr-dev/system-design-cheat-sheet development by creating an account on GitHub.
🔥10
50 терминов системного дизайна, которые должен знать каждый разработчик
https://habr.com/ru/companies/timeweb/articles/846420/
https://habr.com/ru/companies/timeweb/articles/846420/
Хабр
50 терминов системного дизайна, которые должен знать каждый разработчик
1. Масштабируемость / Scalability Масштабируемость — это способность системы поддерживать возросшую нагрузку путем добавления дополнительных ресурсов Примером является добавление дополнительных...
🔥8👍1
Английский для разработчиков
Хочу поделиться с вами бесплатным курсом английского специально для разработчиков на freeCodeCamp. Можно подтянуть свой уровень до А2. Там 105 уроков, каждый с практическими заданиями.
https://freecodecamp.org/learn/a2-english-for-developers
Хочу поделиться с вами бесплатным курсом английского специально для разработчиков на freeCodeCamp. Можно подтянуть свой уровень до А2. Там 105 уроков, каждый с практическими заданиями.
https://freecodecamp.org/learn/a2-english-for-developers
www.freecodecamp.org
Learn to Code — For Free
🔥8❤2👍1
Управляем Arduino при помощи Java
Если вы хотите вынести логику работы с Arduino на ПК или Raspberry Pi и при этом писать на Java, то в этом вам поможет Firmata (готовая прошивка для Arduino) и Firmata4j (Java библиотека). В статье на стороне Raspberry Pi для примера поднимается Spring Boot приложение для управления Arduino.
https://foojay.io/today/control-your-arduino-with-spring/
Если вы хотите вынести логику работы с Arduino на ПК или Raspberry Pi и при этом писать на Java, то в этом вам поможет Firmata (готовая прошивка для Arduino) и Firmata4j (Java библиотека). В статье на стороне Raspberry Pi для примера поднимается Spring Boot приложение для управления Arduino.
https://foojay.io/today/control-your-arduino-with-spring/
foojay
Control your Arduino with Spring | Foojay.io Today
Learn how to use Firmata4j to control an Arduino board from a Raspberry Pi board or directly from your computer.
🔥6👍1
Исправление зависимостей в один клик
Если вы работаете с Gradle, то вам стоит обратить внимание на Dependency Analysis Gradle Plugin. Этот плагин помогает находить лишние зависимости и автоматически исправлять проблемы с ними. Однако стоит быть осторожным с этим плагином так как он может давай "осечки" на сложных скриптах. Это связанно с тем, что плагин использует упрощенную грамматику для парсинга. В будующих версиях парсинг обещают улучшить.
https://dev.to/autonomousapps/one-click-dependencies-fix-191p
Если вы работаете с Gradle, то вам стоит обратить внимание на Dependency Analysis Gradle Plugin. Этот плагин помогает находить лишние зависимости и автоматически исправлять проблемы с ними. Однако стоит быть осторожным с этим плагином так как он может давай "осечки" на сложных скриптах. Это связанно с тем, что плагин использует упрощенную грамматику для парсинга. В будующих версиях парсинг обещают улучшить.
https://dev.to/autonomousapps/one-click-dependencies-fix-191p
DEV Community
One click dependencies fix
Photo by Maxim Hopman on Unsplash If you maintain a JVM1 or Android project, chances are you've...
🔥2👍1
VisuAlgo
Сайточередной для изучение алгоритмов. Среди остальных сайтов с аналогичной тематикой он отличается тем, что работа алгоритмов хорошо представлена визуально.
https://visualgo.net/en
Сайт
https://visualgo.net/en
visualgo.net
visualising data structures and algorithms through animation - VisuAlgo
VisuAlgo was conceptualised in 2011 by Associate Professor Steven Halim (NUS School of Computing) as a tool to help his students better understand data structures and algorithms, by allowing them to learn the basics on their own and at their own pace. Together…
👍4🔥2
Kubetools
Коллекция популярных инструментов для Kubernetes. Там есть инструменты практически на все случаи жизни.
https://collabnix.github.io/kubetools/
Коллекция популярных инструментов для Kubernetes. Там есть инструменты практически на все случаи жизни.
https://collabnix.github.io/kubetools/
kubetools
Kubetools - A Curated List of Kubernetes Tools
Kubetools - Curated List of Kubernetes Tools
👍4🔥2
Algo.monster
Отличный ресурс для подготовки к собеседованиям созданный разработчикам из Google. Особенно он полезен тем кто планирует проходить интервью в компании из FAANG.
https://algo.monster/?sscid=11k9_ggcl7&
Отличный ресурс для подготовки к собеседованиям созданный разработчикам из Google. Особенно он полезен тем кто планирует проходить интервью в компании из FAANG.
https://algo.monster/?sscid=11k9_ggcl7&
AlgoMonster
AlgoMonster: The Most Structured Way to Prepare for Coding Interviews
Coding interviews stressing you out? Get the structure you need to succeed on LeetCode. Now powered by AI.
🔥6
Java + Spring + Jakarta Validation. Самописный «аддон» для валидации Entity через БД и EntityManager
Валидации "первого круга" в jakarta.validation представлены прекрасно (NotNull, NotBlank и пр. аннотации). Статья про валидации "второго круга". К ним можно отнести такие наиболее типичные операции:
• Проверка поля на уникальность при создании новой сущности (записей со значением X поля N на момент сохранения быть не должно).
• Проверка поля на уникальность при обновлении сущности (при обновлении запись со значением X поля N должна оставаться только одна).
• Проверка существования проставленных FK-связей.
• Проверка существования самой сущности в случае обновления (делается, как правило, по ее ID-шке).
• Возможно, проверка unmodified-полей для обновления, т.е. если поле неизменяемое, но во входных данных мы пытаемся его изменить - исключение.
Решение не законченное, но интересное.
https://habr.com/ru/articles/839006/
Валидации "первого круга" в jakarta.validation представлены прекрасно (NotNull, NotBlank и пр. аннотации). Статья про валидации "второго круга". К ним можно отнести такие наиболее типичные операции:
• Проверка поля на уникальность при создании новой сущности (записей со значением X поля N на момент сохранения быть не должно).
• Проверка поля на уникальность при обновлении сущности (при обновлении запись со значением X поля N должна оставаться только одна).
• Проверка существования проставленных FK-связей.
• Проверка существования самой сущности в случае обновления (делается, как правило, по ее ID-шке).
• Возможно, проверка unmodified-полей для обновления, т.е. если поле неизменяемое, но во входных данных мы пытаемся его изменить - исключение.
Решение не законченное, но интересное.
https://habr.com/ru/articles/839006/
Хабр
Java + Spring + Jakarta Validation. Самописный «аддон» для валидации Entity через БД и EntityManager
Вступление Вот и моя первая статья на Хабре. Посвящена она будет презентации своего небольшого решения для валидации моделей с использованием запросов к БД и EntityManager. Вариант этот пока черновой,...
👍3🔥1
Применимость Java в искусственном интеллекте: 7 библиотек для нейросетей, которые стоит изучить
Python довольно широко распространен в среде разработчиков занимающихся AI, но есть ли у него альтернатива? Для Java также существуют библиотеки и фреймворки. В статье рассмотрены 7 наиболее популярных.
https://habr.com/ru/articles/864352/
Python довольно широко распространен в среде разработчиков занимающихся AI, но есть ли у него альтернатива? Для Java также существуют библиотеки и фреймворки. В статье рассмотрены 7 наиболее популярных.
https://habr.com/ru/articles/864352/
Хабр
Применимость Java в искусственном интеллекте: 7 библиотек для нейросетей, которые стоит изучить
Java — один из самых популярных языков программирования, особенно в корпоративной разработке. Несмотря на доминирование Python в области машинного обучения и нейросетей, Java сохраняет свою...
🔥4👍3❤1
Подключение к GigaChat API на Java: пошаговое руководство
Статья о том как подключиться к API GigaChat в IntelliJ IDEA на Java и настроить безопасное соединение с использованием SSL-сертификатов.
https://habr.com/ru/articles/854820/
Статья о том как подключиться к API GigaChat в IntelliJ IDEA на Java и настроить безопасное соединение с использованием SSL-сертификатов.
https://habr.com/ru/articles/854820/
Хабр
Подключение к GigaChat API на Java: пошаговое руководство
Всем привет! В этой статье я расскажу о том, как подключиться к API GigaChat в IntelliJ IDEA на Java и настроить безопасное соединение с использованием SSL-сертификатов, чтобы получать ответы от...
🔥6👍3
Telegram бот + ИИ Jlama своими руками
В статье описывается создание телеграм бота на Java, который будет использовать LLM запущеную локально. В статье используюется Jlama – максимально простой движок инференса для LLM, написанной на голой java без тяжеловесных фрэймворков. По факту Jlama дает возможность обслуживать LLM в java окружении напрямую, то есть в той же jvm, где работает наше приложение.
Статья интересна тем, что в ней не используется открытый API ChatGPT или новомодный Deepseek, а используется локально развернутый Jlama.
https://habr.com/ru/articles/877746/
В статье описывается создание телеграм бота на Java, который будет использовать LLM запущеную локально. В статье используюется Jlama – максимально простой движок инференса для LLM, написанной на голой java без тяжеловесных фрэймворков. По факту Jlama дает возможность обслуживать LLM в java окружении напрямую, то есть в той же jvm, где работает наше приложение.
Статья интересна тем, что в ней не используется открытый API ChatGPT или новомодный Deepseek, а используется локально развернутый Jlama.
https://habr.com/ru/articles/877746/
Хабр
Telegram бот + ИИ Jlama своими руками
Хабр, привет! Сегодня мы попробуем сделать свой ИИ с телеграм ботом для возможности простого общения с ней. Сразу оговорюсь, мы не будем в очередной раз использовать открытый API ChatGPT или...
🔥4👍3🥰1
Тестирование сообщений в Kafka
В статье представлен подход к написанию интеграционных тестов для Kafka-приложений с акцентом на читаемость и поддержку. Опираясь на принципы разделения тестов на этапы (Arrange-Act-Assert), изоляцию и повышение наглядности, мы упрощаем тестирование и понимание интеграций.
В качестве примера — телеграм-бот, перенаправляющий запросы в OpenAI и отправляющий сообщения в Kafka при нарушениях безопасности. Для тестов используется объект RecordCaptor, захватывающий сообщения из Kafka, с обеспечением изоляции и ожиданием смещений.
Подход демонстрирует, как сделать тесты эффективными и эстетичными, сохраняя фокус на логике взаимодействия. Рекомендуется ознакомиться с базовыми идеями в связанных статьях.
https://habr.com/ru/articles/840990/?utm_campaign=840990
В статье представлен подход к написанию интеграционных тестов для Kafka-приложений с акцентом на читаемость и поддержку. Опираясь на принципы разделения тестов на этапы (Arrange-Act-Assert), изоляцию и повышение наглядности, мы упрощаем тестирование и понимание интеграций.
В качестве примера — телеграм-бот, перенаправляющий запросы в OpenAI и отправляющий сообщения в Kafka при нарушениях безопасности. Для тестов используется объект RecordCaptor, захватывающий сообщения из Kafka, с обеспечением изоляции и ожиданием смещений.
Подход демонстрирует, как сделать тесты эффективными и эстетичными, сохраняя фокус на логике взаимодействия. Рекомендуется ознакомиться с базовыми идеями в связанных статьях.
https://habr.com/ru/articles/840990/?utm_campaign=840990
Хабр
Тестирование сообщений в Kafka
Данная статья предлагает подход к написанию интеграционных тестов для приложений с Kafka, позволяющий сосредоточиться на спецификации взаимодействия, делая тесты более читаемыми и легкими для...
👍3🔥2🥰1
GRASP: почему настоящая архитектура начинается не с SOLID
SOLID, GoF-паттерны и даже DDD — это круто, но как перейти от требований к модели? Почему инструменты не всегда решают задачу? Узнайте, как GRASP заполняет пробелы в архитектурном мышлении, помогая понять, что и почему моделировать, а не только как писать код. Личный опыт, аналогии и разбор — всё в одном посте!
https://m.vk.com/@javatutorial-grasp-pochemu-nastoyaschaya-arhitektura-nachinaetsya-ne-s-so
#Java #Architecture #GRASP #DDD
SOLID, GoF-паттерны и даже DDD — это круто, но как перейти от требований к модели? Почему инструменты не всегда решают задачу? Узнайте, как GRASP заполняет пробелы в архитектурном мышлении, помогая понять, что и почему моделировать, а не только как писать код. Личный опыт, аналогии и разбор — всё в одном посте!
https://m.vk.com/@javatutorial-grasp-pochemu-nastoyaschaya-arhitektura-nachinaetsya-ne-s-so
#Java #Architecture #GRASP #DDD
VK
GRASP: почему настоящая архитектура начинается не с SOLID
Многие инженеры начинают своё архитектурное мышление с SOLID. Затем изучают GoF-паттерны. Но всё равно остаётся ощущение, что чего-то не..
🔥10
Аннотации и рефлексия для гибкого кода
Аннотации и рефлексия в Java — мощные инструменты для создания адаптивных приложений. Аннотации добавляют метаданные к коду, помогая компилятору и инструментам анализировать его. Рефлексия позволяет изменять поведение программы во время выполнения.
🔹 Что в статье?
- Объяснение аннотаций: встроенные (@Override, @Deprecated) и пользовательские.
- Как создавать свои аннотации для:
- Документирования кода.
- Проверки данных (@NotNull).
- Примеры кода для лёгкого старта.
https://habr.com/ru/companies/otus/articles/764244/
#Java #Annotations #Reflection #CodingTips
Аннотации и рефлексия в Java — мощные инструменты для создания адаптивных приложений. Аннотации добавляют метаданные к коду, помогая компилятору и инструментам анализировать его. Рефлексия позволяет изменять поведение программы во время выполнения.
🔹 Что в статье?
- Объяснение аннотаций: встроенные (@Override, @Deprecated) и пользовательские.
- Как создавать свои аннотации для:
- Документирования кода.
- Проверки данных (@NotNull).
- Примеры кода для лёгкого старта.
https://habr.com/ru/companies/otus/articles/764244/
#Java #Annotations #Reflection #CodingTips
Хабр
Аннотации и рефлексия в Java
Привет, уважаемые читатели Хабра! Аннотации и рефлексия являются ключевыми концепциями в Java, предоставляя разработчикам мощные инструменты для создания более гибких, адаптивных и понятных...
🔥7👍2
🚀 Раскрываем секреты скорости в Java!
Хочешь знать, как работает сортировка в java.util.Arrays.sort()? 🤔 Timsort для объектов и Dual-Pivot Quicksort для примитивов — два алгоритма, которые делают Java молниеносной! Узнай:
- Почему Timsort — король упорядоченных данных.
- Как Dual-Pivot Quicksort от автора статьи изменил игру в JDK и Android.
- История создания и эволюция этих алгоритмов от эксперта!
💡 Погрузись в мир оптимизации Java и стань профи! Читай статью и прокачай свои знания.
https://habr.com/ru/companies/sberbank/articles/841342/?utm_campaign=841342
#Java #Timsort #Quicksort #Программирование
Хочешь знать, как работает сортировка в java.util.Arrays.sort()? 🤔 Timsort для объектов и Dual-Pivot Quicksort для примитивов — два алгоритма, которые делают Java молниеносной! Узнай:
- Почему Timsort — король упорядоченных данных.
- Как Dual-Pivot Quicksort от автора статьи изменил игру в JDK и Android.
- История создания и эволюция этих алгоритмов от эксперта!
💡 Погрузись в мир оптимизации Java и стань профи! Читай статью и прокачай свои знания.
https://habr.com/ru/companies/sberbank/articles/841342/?utm_campaign=841342
#Java #Timsort #Quicksort #Программирование
Хабр
Удивительная история развития сортировки в JDK
Как вы считаете, если выполнить java.util.Arrays.sort() , то какая сортировка будет вызвана? Quicksort? Timsort? И та, и другая, потому что для объектов вызывается Timsort , а для примитивов (чисел...
🔥4👍3
Погружение в безумный мир Brainfuck: создаём генератор кода и интерпретатор с нуля!
История о том, как автор статьи превратил простую задачку на C в настоящий кодерский квест.
Решать задачу стандартно? Скучно! Автор статьи решил добавить остроты и закодить решение на Brainfuck, а на C сваять интерпретатор для этого безумия.
Но писать Brainfuck-код вручную — это как чистить картошку тупым ножом. Поэтому он вооружился Java и создал генератор кода, чтобы автоматизировать этот хаос и сделать процесс эпичным!
🔥 Погрузись в детали на Хабре: https://habr.com/ru/articles/846076/
История о том, как автор статьи превратил простую задачку на C в настоящий кодерский квест.
Решать задачу стандартно? Скучно! Автор статьи решил добавить остроты и закодить решение на Brainfuck, а на C сваять интерпретатор для этого безумия.
Но писать Brainfuck-код вручную — это как чистить картошку тупым ножом. Поэтому он вооружился Java и создал генератор кода, чтобы автоматизировать этот хаос и сделать процесс эпичным!
🔥 Погрузись в детали на Хабре: https://habr.com/ru/articles/846076/
Хабр
О том как я генератор Brainfuck кода писал
На днях мне потребовалось написать решение задачи поиска максимально возрастающей последовательности цифр на C. Однако я решил что решать эту задачу привычным методом будет скучно и я решил слегка...
🔥4👍2🤯1
Есть ли хорошие форматтеры кода для Java?
Поиск идеального форматера
• Автор статьи ищет хороший Java-форматер.
• Он обсуждает различные форматеры, такие как встроенный в IntelliJ, google-java-format, более красивая Java, Eclipse JDT formatter, Java-формат Palantir, формат Spring Java и межъязыковые форматировщики кода.
Проблемы с существующими решениями
• Ни один из этих форматеров не удовлетворяет всем заявленным требованиям автора.
• Автор статьи готов перейти на другой инструмент, но не может выбрать что-то одно из-за проблем каждого из них.
Альтернативные инструменты
• Он также упоминает EditorConfig и Spotless, но не оценивает их как полноценные средства форматирования.
Рекомендация
• Вывод: Palantir, вероятно, является лучшим вариантом, если не возражаете против запуска программы форматирования из командной строки.
Мне также очень нравится инструмент checkstyle. Он не является в чистом виде форматером, но в нем можно настроить необходимые проверки качества и встроить в DevOps.
https://jqno.nl/post/2024/08/24/why-are-there-no-decent-code-formatters-for-java/
Поиск идеального форматера
• Автор статьи ищет хороший Java-форматер.
• Он обсуждает различные форматеры, такие как встроенный в IntelliJ, google-java-format, более красивая Java, Eclipse JDT formatter, Java-формат Palantir, формат Spring Java и межъязыковые форматировщики кода.
Проблемы с существующими решениями
• Ни один из этих форматеров не удовлетворяет всем заявленным требованиям автора.
• Автор статьи готов перейти на другой инструмент, но не может выбрать что-то одно из-за проблем каждого из них.
Альтернативные инструменты
• Он также упоминает EditorConfig и Spotless, но не оценивает их как полноценные средства форматирования.
Рекомендация
• Вывод: Palantir, вероятно, является лучшим вариантом, если не возражаете против запуска программы форматирования из командной строки.
Мне также очень нравится инструмент checkstyle. Он не является в чистом виде форматером, но в нем можно настроить необходимые проверки качества и встроить в DevOps.
https://jqno.nl/post/2024/08/24/why-are-there-no-decent-code-formatters-for-java/
tr ouwens
Why are there no decent code formatters for Java?
In which I compare and rate code formatting tools for Java.
🔥6👍1