FoxOwlet IT
FoxOwlet IT
  • Видео 53
  • Просмотров 11 639
Огляд HTTP методів | Web dev #5
Розбираємо всі методи HTTP протоколу, їх призначення та властивості.
00:00 Intro
00:45 Структура HTTP запиту
04:10 HTTP методи
06:57 Властивості HTTP методів
09:24 Safe методи
11:11 Prefetch концепція
13:47 Idempotent методи
17:58 Cacheable методи
24:45 Метод GET
27:06 Метод HEAD
29:38 Метод POST
31:39 Кешування POST методів
34:14 Метод PUT
39:17 Метод DELETE
41:07 Метод CONNECT
43:36 Метод OPTIONS
45:39 Метод TRACE
47:28 Метод PATCH
49:34 POST vs PUT vs PATCH
53:45 Властивості методів як вимоги до реалізації серверу
#foxowlet #webdevelopment #http
Просмотров: 233

Видео

Spring Boot веб сервер | Web dev #4
Просмотров 1074 месяца назад
Пишемо простий веб сервер з використанням Spring MVC, Spring Boot та Thymeleaf. 00:00 Intro 02:36 Підключаємо Spring Boot 06:29 Шаблон MVC 09:30 Простий веб сервер з inline веб сторінкою 13:16 Статичний веб сервер 17:10 Конфігурація веб серверу 20:49 Шаблонн веб сторінки: Thymeleaf 32:43 Диспатчинг запиту по HTTP методу 34:00 Переходи між сторінками 37:43 Підсумки #foxowlet #java #webdevelopmen...
Рефакторинг HTTP сервера | Web dev #3
Просмотров 1014 месяца назад
Покращуємо наш самописний веб сервер: додаємо підтримку завантаження веб сторінок з файлів, реалізовуємо шаблонн сторінки. Код проекту: github.com/FoxOwlet/http-server 00:00 Intro 01:42 Робота з хедерами 09:12 Абстракція веб ресурсу 14:49 Читаємо веб сторінку з ресурсного файлу 21:12 Динамічно змінюємо веб сторінку 26:04 Динамічно додаємо нов веб сторінки 45:16 Шаблонн веб сторінки та передача ...
Пишемо свій HTTP веб-сервер | Web dev #2
Просмотров 1,2 тыс.4 месяца назад
Розбираємось, як працює HTTP протокол та пишемо свій простий веб сервер, який може взаємодіяти з браузером. Код проекту: github.com/FoxOwlet/http-server 00:00 Intro 00:46 Теоретична база 04:40 Пишемо TCP сервер 10:27 Розбираємо HTTP запити (HTTP request) 17:40 HTTP відповідь (HTTP request) 32:47 Рефакторимо наш сервер: клас HttpRequest 46:15 Error 404 48:07 Рефакторимо наш сервер: клас HttpResp...
Мережні протоколи: TCP та UDP | Web dev #1
Просмотров 3325 месяцев назад
Розбираємось, що таке протоколи, навіщо вони потрібн та як бувають. Пишемо сервер та клієнт до нього на баз протоколу UDP. 00:00 Intro 01:03 Концепція протоколу 04:09 Протокол на приклад серверу з попереднього відео 08:20 Протоколи транспортного рівня 09:53 Протокол TCP 17:42 Протокол UDP 26:51 Протокол IP 29:52 Взаємодія протоколів 32:38 Практика: пишемо сервер та клієнт на баз UDP протоколу 4...
Клієнт-серверна взаємодія на сокетах | Web dev #0
Просмотров 2175 месяцев назад
Розбираємось, як програми взаємодіють одна з одною, пишемо свій сервер та клієнт для нього використовуючи сокети. 00:00 Intro 01:46 Ліричний відступ: взаємодія фізичних пристроїв 05:47 "Віртуальні" порти 08:15 Переходимо до практики: пишемо свій сервер 15:15 Пишемо свій клієнт 25:51 Запускаємо тестуємо 32:09 Покращуємо наш сервер: підтримка декількох клієнтів послідовно 50:31 Покращуємо сервер...
Юніт-тестування, Mockito і всяке різне
Просмотров 1275 месяцев назад
Поговоримо про тестування класів з залежностями, проблеми, як при цьому виникають та як їх вирішувати за допомогою моків. Розберемось, що таке юніт-тестування, чим воно відрізняється від інтеграційного, чим воно важливе та чому неможливе без використання моків. Потикаємо Mockito framework подивимось, як легко створювати та налаштовувати моки з його допомогою. 00:00 Intro 01:38 Згадуємо, як виг...
Поліморфізм та перший інтерфейс | FOL Project
Просмотров 525 месяцев назад
Додаємо підтримку інтерфейсів у власну мову програмування, робимо функцію print поліморфною. Код проекту: github.com/FoxOwlet/FOL/tree/fol-11 Зміни у вигляд пул реквесту: github.com/FoxOwlet/FOL/pull/18 00:00 Intro 02:41 Суть проблеми 07:06 Моделюємо трейти (інтерфейси) 16:54 Пишемо перший трейт 22:46 Реалізуємо новий трейт в існуючих типах 51:43 Запуск інтерпретатора та фінальн фікси 56:50 Під...
Розширення можливостей тестів через JUnit Extensions
Просмотров 845 месяцев назад
Розбираємо JUnit Extensions - що це таке, навіщо потрібне, як працює та як з ними працювати. Бонусом - трохи Reflection API. 00:00 Intro 00:43 Що таке extensions 01:14 Яку проблему вирішують JUnit Extensions 12:56 Практика: пишемо свої екстеншени 18:25 Взаємодія з полями тестового класу 24:03 Бонус: конфігурація екстеншену через аннотації 27:36 Параметризація ектеншенів "напряму" 31:13 Підсумки...
Базовий огляд JUnit 5 за 75 хвилин
Просмотров 2397 месяцев назад
Поговоримо про JUnit, розберемо, як його використовувати для написання автоматизованих тестів, як тести ми можемо писати та як це все працює під капотом. 00:00 Intro 01:07 Що ми будемо тестувати 01:59 Переходимо до тестування: додаємо залежності 02:58 Пишемо перш тести 10:10 Запуск тестів в IDEA 11:26 Життєвий цикл тестів: @TestInstance 18:42 Порядок запуску тестів 22:51 Більше про Lifecycle.PE...
Тестування на Java для новачків: базові концепції
Просмотров 2208 месяцев назад
Поговоримо про тестування, розберемось, що це, навіщо потрібне та що нам дає, напишемо свої найпростіш автоматизован тести без використання сторонніх бібліотек 00:00 Intro 00:55 Що таке тестування 01:30 Тестування Hello World 02:45 Проблеми тестування "очима" 10:26 Вихід є: автоматизація тестування 12:46 Пишемо найпростіший автотест 19:54 Параметризуємо код запуску 23:22 Тести як гарантія праце...
Базовий огляд Spring Boot
Просмотров 3139 месяцев назад
Розбираємо Spring Boot на практиці: переписуємо проект, використовуємо стартери, автоконфігурації та профілі. Перша частина (Spring Core): ruclips.net/video/X7IhG45X55s/видео.html Код проекту: github.com/FoxOwlet/Spring-demo 00:00 Intro 00:27 Огляд проекту 03:17 Зміни в проект: створення контексту через конструктор 09:06 Зміни в проект: аннотація PostConstruct 10:42 Зміни в проект: Spring JDBC ...
Рядковий тип (String) | FOL Project
Просмотров 639 месяцев назад
Додаємо підтримку рядків у власну мову програмування Код проекту: github.com/FoxOwlet/FOL/tree/fol-10 Зміни у вигляд пул реквесту: github.com/FoxOwlet/FOL/pull/16 00:00 Intro 00:36 Суть проблеми з існуючими типами 05:09 Підтримка рядків в граматиці 09:09 Інтерпретація рядкових літералів 10:17 Підтримка рядкового типу 13:00 Ускладнюємо інтерпретацію літералів 15:30 Тестуємо та розширюємо реаліза...
Maven: конфлікти версій та управління залежностями
Просмотров 7610 месяцев назад
Продовжуємо говорити про Apache Maven, розбираємо мультимодульн проекти та наслідування проектів, управління версіями залежностей та їх конфлікти. Попереднє відео по maven: ruclips.net/video/zt-2rPf3u-o/видео.html 00:00 Intro 00:32 Мультимодульн проекти 03:04 Види артефактів та тег packaging 07:17 Робота з мультимодульним проектом 08:48 Використання модуля в якост залежності 16:19 Наслідування ...
Асоціативність операторів та консольні утиліти | FOL Project
Просмотров 4910 месяцев назад
Розбираємо граматику Java, виправляємо проблеми в граматиц FOL, пишемо повноцінний консольний інтерпретатор та простий REPL. Код проекту: github.com/FoxOwlet/FOL/tree/fol-09 Зміни у вигляд пул реквесту: github.com/FoxOwlet/FOL/pull/14 00:00 Intro 00:40 Проблема асоціативност операторів 06:32 Розбираємо граматику Java 14:45 Правимо граматику FOL 21:16 Консольний інтерпретатор файлів 27:44 Збирає...
Apache Maven під капотом
Просмотров 21310 месяцев назад
Apache Maven під капотом
Логічний тип та нативні функції | FOL Project
Просмотров 3211 месяцев назад
Логічний тип та нативн функції | FOL Project
ANTLR: кодогенерація та парсери | FOL Project
Просмотров 10811 месяцев назад
ANTLR: кодогенерація та парсери | FOL Project
Дизайн патерн Builder - конструктор на максималках
Просмотров 12211 месяцев назад
Дизайн патерн Builder - конструктор на максималках
Вказівники на структури | FOL Project
Просмотров 8111 месяцев назад
Вказівники на структури | FOL Project
Повний гайд по дебагу в IntelliJ IDEA
Просмотров 31611 месяцев назад
Повний гайд по дебагу в IntelliJ IDEA
Робота з полями структур | FOL Project
Просмотров 8211 месяцев назад
Робота з полями структур | FOL Project
Дизайн патерн Composite - ієрархії обʼєктів та консольне меню
Просмотров 120Год назад
Дизайн патерн Composite - ієрархії обʼєктів та консольне меню
Реалізація структур (struct) в мові програмування | FOL Project
Просмотров 213Год назад
Реалізація структур (struct) в мов програмування | FOL Project
Дизайн патерн Decorator - ООП без наслідування
Просмотров 203Год назад
Дизайн патерн Decorator - ООП без наслідування
Параметри та аргументи функцій, області видимості | FOL Project
Просмотров 93Год назад
Параметри та аргументи функцій, област видимост | FOL Project
Що не так з функціоналкою в Java або чому в Java немає функціонального програмування
Просмотров 204Год назад
Що не так з функціоналкою в Java або чому в Java немає функціонального програмування
Інтерпретація функцій та функціональна парадигма | FOL Project
Просмотров 84Год назад
Інтерпретація функцій та функціональна парадигма | FOL Project
Модульний інтерпретатор | Рефакторинг | FOL Project
Просмотров 109Год назад
Модульний інтерпретатор | Рефакторинг | FOL Project
Proxy - дизайн патерн, без якого неможливий Spring framework
Просмотров 207Год назад
Proxy - дизайн патерн, без якого неможливий Spring framework

Комментарии

  • @SVolikov
    @SVolikov 3 месяца назад

    Добрий день! Дякую за відео, але ... Це звісно не принципово, але бажано більш уважно приводити приклади. Наприклад, тіло запиту, яке приведено напочатку відео, ніколи не спрацює із-за невірно вказаних лапків.

    • @FoxOwlet-IT
      @FoxOwlet-IT 3 месяца назад

      А що з ними не так?_)

    • @FoxOwlet-IT
      @FoxOwlet-IT 3 месяца назад

      Мда. Воно реально валідацію не проходить. Виявляється, в мене автозаміна лапок була включена. Дякую :)

  • @_raygun
    @_raygun 3 месяца назад

    Топчик, як завжди

  • @apalyukha
    @apalyukha 3 месяца назад

    Дякую за Вашу роботу!

  • @DmytroShpak-d6m
    @DmytroShpak-d6m 4 месяца назад

    Залишилось ще попросити частіше випускати нові відео ))

    • @FoxOwlet-IT
      @FoxOwlet-IT 4 месяца назад

      І так часу нормально не вистачає :(

  • @DmytroShpak-d6m
    @DmytroShpak-d6m 4 месяца назад

    Браво!!! Так довго чекав чогось подібного )))) продовжуйте тему Spring буду надзвичайно вдячний!!!

    • @FoxOwlet-IT
      @FoxOwlet-IT 4 месяца назад

      На пару відео ще відкочусь на щось більш низькорівневе. А тоді назад в спрінг

  • @yurim7756
    @yurim7756 4 месяца назад

    Круто. Я бекендер і не те щоб щось було нове і я не здогадувався як воно працює. Та й писати свій http сервер нема ніякої потреби. Зате добра ідея попрокрастинувати на вихідний, і написати, наприклад на С ))

    • @FoxOwlet-IT
      @FoxOwlet-IT 4 месяца назад

      Вбити вихідні на те, аби написати щось цікаве, але нікому не потрібне - то святе :)

  • @catchup4546
    @catchup4546 4 месяца назад

    Привіт, практикуєш менторство, за якою ціною? Посилань на контакти на каналі не знайшов, тому питаю тут:)

    • @FoxOwlet-IT
      @FoxOwlet-IT 4 месяца назад

      Привіт. Напряму - скоріше поки ні. А так - foxminded.ua/java-1/. Якщо треба контакт - t.me/black220sun

  • @mikevaskiv2801
    @mikevaskiv2801 4 месяца назад

    Круто! Дуже детальне і цікаве пояснення! Дякую, що створюєш такий класний контент🔥

  • @vladyslavh3940
    @vladyslavh3940 4 месяца назад

    Дякую за круте відео! Сподобалося порівняння фізичного порта(USB і т.д.) з мережевим портом. Ніколи про це не думав у такому ключі

    • @FoxOwlet-IT
      @FoxOwlet-IT 4 месяца назад

      Я раніше теж не задумувався. А потім рандомно прийшло в голову, і аж захотілось це в відео засунути😅

  • @zhenyasidun7151
    @zhenyasidun7151 4 месяца назад

    Дуже цікаво, все конспектую щоб не забудь. Дякую за відео

  • @DigitalHardrock
    @DigitalHardrock 4 месяца назад

    дякую за класне та інформативне відео без води, рівень уваги до деталей just right!

  • @jaskier6295
    @jaskier6295 4 месяца назад

    цікаво було подивитися для розширення кругозору

  • @aya4924
    @aya4924 4 месяца назад

    Я взагалі-то джаваскріптизер, але подивився для загального розвинення. Досить цікаво розповідаєш, продовжуй!

    • @FoxOwlet-IT
      @FoxOwlet-IT 4 месяца назад

      Ну отакі "базові" штуки в принципі достатньо загальні і не сильно від мови залежать. Круто, що не лише джавістам цікаво_)

  • @alexg1685
    @alexg1685 5 месяцев назад

    Дякую

  • @alexg1685
    @alexg1685 5 месяцев назад

    Дякую. Супер пояснення про залежності від інших класів

  • @salmontheturtle130
    @salmontheturtle130 5 месяцев назад

    привітик! відео чудове та інформативне, але не для "новачків", якщо воно таким мало бути я особисто, як людина котра лише починає вивчення джави, фактично, на жаль, не можу з легкістю розуміти та запам'ятовувати всю інформацію з такою швидкістю:\ (хоча варто додати, що це важливо, і контент такого роду дуже і дуже потрібен)

    • @FoxOwlet-IT
      @FoxOwlet-IT 5 месяцев назад

      Технічно, воно мало б бути "для новачків". Але я коли відео знімаю, я виходжу з того, що людина, яка буде дивитися його, знає все (ну або все, що потрібно) з того, що було в вже відзнятих відео Ну а саме тут мені і самому здавалось, що воно в результаті якось сильно заплутано і не дуже "просто" вийшло. Але вже як є :shrug:

  • @singane436
    @singane436 5 месяцев назад

    араквіель топ

  • @DmytroShpak-d6m
    @DmytroShpak-d6m 5 месяцев назад

    Прекрасно!!! Дякую ))) починаю дивитись ))

  • @takumi_senju
    @takumi_senju 5 месяцев назад

    Коментар в підтримку прекрасного контенту ❤

  • @DmytroShpak-d6m
    @DmytroShpak-d6m 5 месяцев назад

    Можливо я десь пропустив, але стало цікаво навіщо своя мова? Щоб глибше зрозуміти принципи побудови інших???

    • @FoxOwlet-IT
      @FoxOwlet-IT 5 месяцев назад

      Я чотири з копійками роки розробкою трансляторів займався. Мені це просто подобається_) Місцями - так, спробувати реалізувати руками якісь фічі інших мов. Місцями - просто аби згадати щось, з чим я працював. Місцями - показати, як це працює "під капотом"

  • @alexg1685
    @alexg1685 6 месяцев назад

    Дякую за корисний контент

  • @DmytroShpak-d6m
    @DmytroShpak-d6m 6 месяцев назад

    Забивати точно не потрібно ) дуже чекаємо на нові відео )) особисто я про Spring )

    • @FoxOwlet-IT
      @FoxOwlet-IT 6 месяцев назад

      Та щось все руки до ютубу не доходили, буду виправлятись_) По Spring'у щось конкретне цікавить?

  • @user-vhxslj1
    @user-vhxslj1 7 месяцев назад

    Дякую, дуже цікаво та інформативно, чекаю на наступне відео)

  • @alexg1685
    @alexg1685 7 месяцев назад

    Дякую за корисний контент!

  • @DmytroShpak-d6m
    @DmytroShpak-d6m 8 месяцев назад

    Дуже дякую за відео!!! А буде ще продовження по Springy?

    • @FoxOwlet-IT
      @FoxOwlet-IT 8 месяцев назад

      Планується. Але в мене зараз щось то часу немає, то натхнення...

    • @DmytroShpak-d6m
      @DmytroShpak-d6m 8 месяцев назад

      @@FoxOwlet-IT Будемо сподіватись й тоді чекати ) Наснаги вам!

  • @MrMor94ok
    @MrMor94ok 8 месяцев назад

    Дякую за контент. Скачав проект роблю так саме, но "Error creating bean with name 'pipeline': Invocation of init method failed". У вас проект висвітлються як Application в настройках, а в мене Spring boot

    • @FoxOwlet-IT
      @FoxOwlet-IT 8 месяцев назад

      > Invocation of init method failed Це щось дивне. Якщо проблема в тому, про що я думаю (профілі) - мала б бути інша помилка. > У вас проект висвітлються як Application в настройках, а в мене Spring boot Можна змінити конфігурацію запуску. Але і з спрінг бутовою конфігурацією має працювати, просто треба включити один з профілів, або flowerShop, або fruitShop, аби в контекст всі необхідні біни потрапили. Це можна зробити або параметром командного рядка в стантарній Application конфігурації (як у відео), або в тій же ран конфігурації Spring boot вказати (ну або через мавен чи проперті файл)

  • @ASDjonok
    @ASDjonok 9 месяцев назад

    Дякую

  • @ASDjonok
    @ASDjonok 9 месяцев назад

    Дякую

  • @KasGayda
    @KasGayda 9 месяцев назад

    Дякую за корисний матеріал. Є шанс що проект буде на гітхабі? Хотілося б детальніше подивитися в деякі місця у коді

    • @FoxOwlet-IT
      @FoxOwlet-IT 9 месяцев назад

      Точно, дякую. Забув лінки в опис додати. github.com/FoxOwlet/Spring-demo

  • @DmytroShpak-d6m
    @DmytroShpak-d6m 9 месяцев назад

    Дякую! Дуже цікавий матеріал! Якщо можливо врахувати побажання, хотілось би попросити більше відео по Spring та його компонентам! Заздалегідь вдячний!!!

    • @FoxOwlet-IT
      @FoxOwlet-IT 9 месяцев назад

      Якраз є в найближчих планах Spring Test, MVC та Boot А побажання - так, стараюсь враховувати_)

    • @DmytroShpak-d6m
      @DmytroShpak-d6m 9 месяцев назад

      @@FoxOwlet-IT​ Тоді з нетерепінням чекаємо )

  • @DmytroShpak-d6m
    @DmytroShpak-d6m 9 месяцев назад

    З новим роком! Дуже дякую за вашу роботу, не зупиняйтесь!

  • @DmytroShpak-d6m
    @DmytroShpak-d6m 10 месяцев назад

    Дякую за чудові відео головне не зупиняйтесь. Дуже чекаю наступні відео.

  • @apalyukha
    @apalyukha 10 месяцев назад

    О maven цікаво, і хороший навик.

  • @Boris_tbi
    @Boris_tbi 10 месяцев назад

    Починаю дивитися цю серію відео. Дуже сповідаюся що плани реалізувалися, бо якщо реалізувалися - то буде дуже цікаво.

    • @FoxOwlet-IT
      @FoxOwlet-IT 10 месяцев назад

      Там ще що планів, що роботи - на пару років такими темпами😅 Але зараз вже в принципі готовий невеличкий інтерпретатор плюс базові конструкції - числа, арифметичні операції, змінні, функції, структури

  • @gumenyukalex
    @gumenyukalex 11 месяцев назад

    Маштаб не той, з телефона перед сном не подивитись нормально)

  • @gumenyukalex
    @gumenyukalex 11 месяцев назад

    Треба було ще про дефолту імплементацію в інтерфейсі в цьому відео показвти

    • @FoxOwlet-IT
      @FoxOwlet-IT 11 месяцев назад

      Ну, туди вже не влізе... А от в окреме відео, разом з відмінностями інтерфейсу і абстрактного класу - можна буде_)

  • @Boris_tbi
    @Boris_tbi 11 месяцев назад

    На мою думку (це лише моя думка) Builder справді стає потрібним коли не просто конструктор з багатьма параметрами, а декілька конструкторів з багатьма параметрами. От тоді замість цих конструкторів і робити білдер, випадок про який як раз була розповідь в «Дефолтні значення в білдері». От уявіть як присвоїти Locale.getDefault().getDisplayCountry() без білдера.

    • @FoxOwlet-IT
      @FoxOwlet-IT 11 месяцев назад

      Так, може я це в відео не так подав, але з мого боку білдер вирішує (в перших прикладах) не скільки проблему великої кількості параметрів, скільки того, що в них однакові типи і ми можемо переплутати їх і передати щось "не туди" Якщо в нас, умовно, 10 параметрів, і всі різного типу - в нас такої проблеми немає. І білдер буде скоріше шкідливим. Ми не вирішуємо жодної проблеми, а лише ускладнюємо систему і робимо її більш вразливою до багів (складніше гарантувати, що ми передали всі значення, які треба) Ну і в загальному випадку - білдер вирішує проблему створення складних об'єктів, роблячи цей процес створення "покроковим". Якщо в нас немає ніякої проблеми з цим (або ми її не бачимо) - білдер нам не потрібний Інше питання, що завдяки ломбоку, білдер стає "швидким" і простим рішенням. І його можуть "на автоматі" додати просто аби був

  • @viktors.4844
    @viktors.4844 11 месяцев назад

    Привіт, дякую за відео. В мене питання. Пару місяців тому я експериментував/освоював білдер, находив різні приклади і вони виглядять як і в тебе(або ломбок), але я реалізував(сам дійшов) до іншого вигляду, і я розумію що тут всі праві а я щось пропускаю бо я бачу переваги(не бачу недоліків) свого білдера над іншим. Реалізація : private User(){}; private String name="Default Name"; public static class UserBuilder{ private User that; public UserBuilder(){ that=new User(); } UserBuilder name(String name){ that.name=name; return this; } User build(){ return that; } Переваги : 1) завжди є значення за замовченням. 2) не дублюються поля, в білдері їх зазвичай багато, а коли і юзерів багато то бере це памяті не мало. Що саме я пропускаю? Дякую.

    • @FoxOwlet-IT
      @FoxOwlet-IT 11 месяцев назад

      Привіт TL;DR; З точки зору теорії - такий білдер програє за рахунок того, що юзер має бути мутабельним. З точки зору практики - в більшості випадків юзер і так буде мутабельним, тому це не проблема Ну і плюс цей білдер одноразовий, його інстанс не можна безпечно перевикористати Розгорнуто: Ось такий білдер простіший, так. Але є нюанс. Об'єкт, який створюється - потенційно мутабельний. В гіршому випадку в нас буде публічний сеттер (окей, хібернейт і інші фреймворки, які вимагають сеттер - окрема тема). А білдер дозволяє тримати мутабельний стан окремо від об'єкту, який він створює. Відповідно, у нас є гарантія, що після створення об'єкт вже не зміниться. А з іммутабельними об'єктами працювати простіше, вони безпечніші і призводять до меншої кількості проблем, особливо в багатопоточному середовищі. Це можна виправити приватним сеттером (ну або сетити в поле, що практично те саме). Або package-private сеттер. Суть та ж сама, просто потенційно більше класів можуть мати доступ до стану, це якось не по-ООПшному Проблема номер два. Стан об'єкту по суті зберігається в білдері. Якщо використати інстанс цього білдера для створення двох об'єктів... Результат навряд буде очікуваним - старий об'єкт теж зміниться. А це може бути не дуже приємно дебажити. Хороший білдер має або повертати новий об'єкт кожен раз, або бути одноразовим і при другому зверненні кидати ексепшн Але є простий варіант, як позбавити останньої проблеми твій білдер public User build() { User result = that; that = new User(); return result; } Але все ще лишається проблема потенційної мутабельності юзера Сказати, що це проблема - важко, бо, знов таки, хібернейт вміє працювати лише з мутабельними сутностями. Тому хочеш-не хочеш, а публічний сеттер робити доведеться (ну, не беремо до увагі ті унікальні проекти, де джава юзається без спрінга і хібера) Тут (з хібером) такий білдер скоріше має право на життя Білдер, який дублює стан (знов таки, в теорії) безпечніший. А ломбок якраз і "хороший" тим, що приховує це дублювання від нас. А оскільки він код генерує сам, нам не треба синхронізувати наші зміни в двох класах. Тому по суті дублювання є лише в результуючому коді, але не в сорцях. Відповідно, ніяких проблем, які властиві дублюванню коду, це не несе

    • @viktors.4844
      @viktors.4844 11 месяцев назад

      @@FoxOwlet-ITДякую за таку розгорнуту відповідь, осягнув поки не все але зачерпнув багато. Ще мабуть "вузьке місце" щоб від створення that аж до методу build() цей стан що зберігається в білдері не змінувався де інде(в іншому потоці). Короче все воно добре "звідси аж до.. " потрібно знати де і коли використовувати і коли є своя реалізація можуть бути свої(не очевидні для гугла наприклад) проблеми/виключення. 👍

    • @FoxOwlet-IT
      @FoxOwlet-IT 11 месяцев назад

      Ну проблема багатопоточності скоріше для будь-якого білдера буде актуальною, незалежно від реалізації. Але зазвичай білдер між потоками і шарити немає сенсу. Це ж по суті те саме, що намагатися виконання конструктора рознести на декілька потоків, що особливого сенсу не має

    • @viktors.4844
      @viktors.4844 11 месяцев назад

      @@FoxOwlet-IT доречі, зараз подивився як я там тоді писав, я писав без сеттерів (внутрішній статичний клас бачить приватні поля, коли писав не задумовувався тому і перевірив зараз).

  • @gumenyukalex
    @gumenyukalex 11 месяцев назад

    Топ контент) все просто і зрозуміло

    • @FoxOwlet-IT
      @FoxOwlet-IT 11 месяцев назад

      Це добре_) Я відоси в першу чергу і хочу простими і зрозумілими робити. Якщо виходить - вже непогано_)

  • @apalyukha
    @apalyukha 11 месяцев назад

    О шаблони проєктування, а потім і про SOLID можливо щось буде Дякую.

    • @FoxOwlet-IT
      @FoxOwlet-IT 11 месяцев назад

      Так, до SOLIDу теж колись руки дійдуть_)

  • @VolodymyrTsiumra
    @VolodymyrTsiumra 11 месяцев назад

    Гарна і структурована інформація. Трошки дозволила розширити горизонти. Додам що також можна користатись з ALT + Клік на виклику функції. Наприклад, щоб не писати в експессіон isLarge(result) можна було клікнути з ALT і одразу побачити інформацію. Також, при дебагу можна міняти стан об'єкта просто клікнувши на нього і через Ф2 встановити необхідне вам значення. Можливо хтось знає, якщо я дебажу внутрішні класи через декомпілятор, і отримую повідомлення що байткод не співпадає з теперішнім рядком, якось це можна оминути? В основному це отримувую на циклах foreach де декомпілятор їх імплементує через ітератор.

    • @FoxOwlet-IT
      @FoxOwlet-IT 11 месяцев назад

      Уф, про ALT - це прям вогонь, дякую_) А з приводу декомпілятора - якщо це залежність з мавену, (зазвичай) ідея пропонує сорці скачати. Тоді проблема має зникнути В мене з цим постійно схожа проблема - в стектрейсі номер рядка відрізняється завжди через відсутність коментарів Це якщо це про залежності. Якщо саме про внутрішні (inner) класи - я особисто не в курсі

  • @andriiK_k
    @andriiK_k 11 месяцев назад

    Дякую Вам за такі відео-уроки.

  • @СергійНаумець-т3щ
    @СергійНаумець-т3щ 11 месяцев назад

    Хороша подача матеріалу. Не планується відео по java FX?

    • @FoxOwlet-IT
      @FoxOwlet-IT 11 месяцев назад

      Навряд... Я з ним особливо ніколи не працював, розказувати немає чого_)

  • @nikzim2132
    @nikzim2132 11 месяцев назад

    це дуже круто !)

  • @Boris_tbi
    @Boris_tbi 11 месяцев назад

    Доступна та цікава подача матеріалу. Хай квітне український ютуб!

  • @РусланаШулепова
    @РусланаШулепова 11 месяцев назад

    Як завжди дуже доступна подача матеріалу, дякую! Удачі Вам і Вашому каналу! ❤

  • @apalyukha
    @apalyukha 11 месяцев назад

    Дуже Дякую!

  • @shooli_owner
    @shooli_owner Год назад

    Вітаю! Never give up!

  • @Boris_tbi
    @Boris_tbi Год назад

    Це декоратор чи проксі: а хрін його знає )) 1. Це декоратор бо він додає нову функціональність: повторювати багато разів. А ще він не знає до об’єкту якого саме класу додає, знає тільки до якого інтерфейсу. 2. Це проксі бо керує скільки разів буде викликаний метод «внутрішнього класу», а саме: багато разів. А декоратор завжди повинен викликати метод «внутрішнього класу» один раз.

    • @FoxOwlet-IT
      @FoxOwlet-IT Год назад

      Проксі теж додає якусь нову функціональність. Інакше в ньому не було б сенсу. Тому це не те, що має бути ключовою відмінністю_) А от те, що цей клас "керує" життєвим циклом (кількістю викликів методу) - в принципі важливий і досить суттєвий момент

  • @РусланаШулепова

    Дякую за якісну подачу матеріалу!