CRUD веб приложение на ASP.NET Core, React, EF Core, Postgresql с чистой архитектурой

แชร์
ฝัง
  • เผยแพร่เมื่อ 15 มิ.ย. 2024
  • В этом видео я покажу как сделать просто фуллстак crud веб приложение на asp net core + react (next.js).
    ✅ Подписаться на Telegram: t.me/sachkov_blog
    ✅ Поддержать денежкой: boosty.to/sachkov/donate
    00:00 Введение
    01:00 Слой с domain моделями
    07:00 Слой с базой данных
    10:30 Конфигурация модели в бд
    13:00 Добавление репозитория
    24:00 Класс Program
    27:00 Docker контейнер с postgresql
    29:00 Слой с бизнес логикой
    34:50 Контроллеры
    48:00 Фронтенд
    1:34:00 Показываю результат

ความคิดเห็น • 96

  • @KirillSachkov
    @KirillSachkov  5 หลายเดือนก่อน +15

    В итоге мало чего объяснил и подача оставляет желать лучшего. В следующих видео постараюсь сделать качественнее, а это можете смело ставить на 2х. Мой телеграм канал - t.me/sachkov_blog

    • @user-eo9my7or6n
      @user-eo9my7or6n 5 หลายเดือนก่อน +4

      Спасибо за труд. Наоборот, всё очень понятно и доходчиво) Очень полезно и всё доходчиво. Я бэкендер

    • @KirillSachkov
      @KirillSachkov  5 หลายเดือนก่อน +1

      @@user-eo9my7or6n Спасибо!

    • @bloodymanchenal9281
      @bloodymanchenal9281 4 หลายเดือนก่อน +7

      Всё замечательно. Понятно что дальше лучше. Самое главное не опускай руки, так как по .NET очень мало свежих видео и я очень рад что нашёл твой канал так как он очень сильно помог мне в понимание мелких деталей .NET. Спасибо большое)))

    • @nick_stelmakh
      @nick_stelmakh 3 หลายเดือนก่อน +1

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

    • @polyfem128
      @polyfem128 2 หลายเดือนก่อน

      Смотрел на 1х не отрываясь

  • @user-xm1hr3rs4i
    @user-xm1hr3rs4i 5 หลายเดือนก่อน +8

    Шикарно, большое спасибо!
    Наконец-то кто-то приводит пример, приближенный к реальной разработке

  • @underground49
    @underground49 4 หลายเดือนก่อน +2

    Кирилл огромное тебе спасибо!!! Давно хотел фронт пощупать, ты вдохновил)

  • @SonicMusics
    @SonicMusics 5 หลายเดือนก่อน +7

    Опа, это я удачно зашел. Хорошо объясняешь, продолжай в том же духе.

  • @Im_like_Merphy
    @Im_like_Merphy 3 หลายเดือนก่อน +2

    Спасибо большое! Очень познавательное видео.

  • @yakov.lopatin
    @yakov.lopatin 5 หลายเดือนก่อน +5

    Хоть видео и длинное, но посмотрел на одном дыхании, стал больше понимать, как работает приложение в целом, спасибо

  • @moon5964
    @moon5964 24 วันที่ผ่านมา +1

    Забавный момент который я не сразу заметил. Тут создается контейнер в Докере и запускается но используется при этом обычный сервер Postgresql если я правильно понял. То есть в данном случаи создание контейнера используется как создание БД схемы а работа с БД ведется напрямую через локальный установленный скорее всего сервер Postgresql, а не в докера , ибо если остановить работу контейнера, то о чудо, работа апи не будет выбрасывать ошибки, что докажет что апи работает с сервером. Но видео при этом очень полезное и достаточно хорошо показывает БАЗУ!)

  • @julik_r
    @julik_r 5 หลายเดือนก่อน +6

    Я фронтендер, появилось больше понимания, как работает бэкенд. Спасибо за видео!)

  • @sherlockholmes5395
    @sherlockholmes5395 4 หลายเดือนก่อน +2

    Thanks a million for your video it's a good lesson for me. i made api and I will be doing next super Welldone!!!

  • @bogdanlistopad271
    @bogdanlistopad271 4 หลายเดือนก่อน +4

    @KirillDeveloper видео понравилось, но пример уж слишком простой в данном случае. Мне кажется стоило добавить еще несколько связанных между собой сущностей, чтобы показать как реализовать эту связь в моделях и репозиториях, например как в видео по EF. В любом случае благодарю за видео, продолжай!

  • @graffoman
    @graffoman หลายเดือนก่อน

    Очень интересный видос.
    Многое непонятно, но это даже здорово, т.к. захотелось углубиться и погуглить отдельно некоторые моменты.
    Я далек от фронта, но тоже было интересно, хотелось с чего-то начать. Почему бы не начать с того, что предлагает автор.
    Думаю, что пересмотрю видео ещё раз. Спасибо 😊

  • @user-ye8ll1ll9k
    @user-ye8ll1ll9k หลายเดือนก่อน +1

    Gоod !!! больше нечего и не нужно говорить! спасибо за ваш труд!

  • @yaroslav.shamov
    @yaroslav.shamov 5 หลายเดือนก่อน +1

    Спасибо за видео!

  • @Polite_person_
    @Polite_person_ 4 หลายเดือนก่อน +1

    Спасибо, то что нужно.

  • @behemoth1621
    @behemoth1621 หลายเดือนก่อน

    Добрый день!Спасибо за материал!А есть ссылка на гит с кодом?

  • @yevhenzoria9532
    @yevhenzoria9532 3 หลายเดือนก่อน +1

    Спасибо, очень познавательно. Есть вопрос: чем плох шаблон "React and ASP.NET Core"? Его используют на практике, или все же обычно используют разделение frontend/backend как в ролике? Спасибо.

    • @KirillSachkov
      @KirillSachkov  3 หลายเดือนก่อน +1

      Большинство разделяют проекты, чтобы все деплоилось независимо + в шаблоне используется сборщик vite, кому-то может не нравится. Просто если создашь отдельно фронт, то можно вести себя гибче, менять сборщики и тд, поэтому рекомендую делать раздельно

  • @vitaliyschweigen4833
    @vitaliyschweigen4833 หลายเดือนก่อน

    Привет. Не мог бы ты пояснить момент.
    Не понятен смысл существования BookEntity.
    Действительно ли нам нужно, используя EF codefirst и миграции, юзать эту прослойку? Какие проблемы мы этим решаем? В твоем примере получается просто валидация при чтении из БД, зачем оно надо не понятно.
    За труды Спасибо, это самый лучший мануал по теме, который мне удалось найти.

  • @nouchance
    @nouchance 5 หลายเดือนก่อน +1

    spasibo!

  • @erproerpro903
    @erproerpro903 5 หลายเดือนก่อน +1

    Молодец 👍

  • @qwertyprob
    @qwertyprob 2 วันที่ผ่านมา

    почему валидацию не делать через аттрибут required ???

  • @it-tb8od
    @it-tb8od หลายเดือนก่อน +1

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

  • @ElenaNk7
    @ElenaNk7 8 วันที่ผ่านมา

    Есть исходный код в доступе?

  • @user-yo7mw6oj4p
    @user-yo7mw6oj4p 5 หลายเดือนก่อน +1

    Это я удачно залетел. Давно хотел пощупать React за мяхкое место. С меня лайк и подписка. Так држать.
    И сразу вопрос. Можно ли добавть итолько страницу на реакте. В Существующие mvc приложение net core 6. Например реализовать админку и странице статистики по каким нибуть item"s?

    • @KirillSachkov
      @KirillSachkov  5 หลายเดือนก่อน +1

      Спасибо! По идее можно, есть интеграции react в asp net mvc, есть nuget библиотеки для этого, после установки можно будет использовать файлы jsx.

    • @user-yo7mw6oj4p
      @user-yo7mw6oj4p 5 หลายเดือนก่อน +2

      @@KirillSachkov Вот и готовая идея для реализации любителей нестандртного програмирования ))

  • @Xor0x
    @Xor0x 22 วันที่ผ่านมา

    Странно я все делаю как на видео но у меня выдаёт ошибку в Programs.cs а именно в IBooksService и IBooksService он не видит их хоть я ссылку даю.

  • @murr_ka4374
    @murr_ka4374 หลายเดือนก่อน +1

    Как ты в Visual Studio сделал внешний вид, наподобие внешнего вида vs code?

    • @KirillSachkov
      @KirillSachkov  หลายเดือนก่อน

      Это preview версия

  • @sergeyz.5845
    @sergeyz.5845 3 หลายเดือนก่อน +1

    [15:55] Вызов Select после ToListAsync? надо до превращения в лист мэпить. запрос в бд будет чаще всего короче и не придется после создания листа итерироваться по новой

    • @sergeyz.5845
      @sergeyz.5845 3 หลายเดือนก่อน

      в примечании microsoft рекомендует использовать Add, кроме некоторых исключительных случаев

  • @alexandralikin3830
    @alexandralikin3830 3 หลายเดือนก่อน +2

    Кирилл, есть возможность предоставить гитхаб с этим проектом?

    • @KirillSachkov
      @KirillSachkov  3 หลายเดือนก่อน +1

      Позже в телеграм канале выложу

  • @Easycore2000
    @Easycore2000 4 หลายเดือนก่อน +1

    Есть ли смысл использовать шаблон c реактом в VS, там где сборщик vite?

    • @KirillSachkov
      @KirillSachkov  4 หลายเดือนก่อน +1

      Ещё не использовал vite, но как минимум для изучения, смысл есть

  • @proger2396
    @proger2396 หลายเดือนก่อน +1

    Сделай еще одно такое видео просто создай полноценный проект и сразу на видео покажи как в нитернет опубликовать проект

  • @Enigma-mv6ss
    @Enigma-mv6ss 5 หลายเดือนก่อน +2

    В некоторых случаях dto же находится на уровне бизнес логики , то есть логика возвращает нужный объект для контроллера , а контроллер просто возвращает , то есть в контроллере минимум логики. Такой вариант более правильнее ?

    • @KirillSachkov
      @KirillSachkov  4 หลายเดือนก่อน

      Зависит от подхода, но если это подход контролер, сервис, репозиторий, то сервис должен возвращать Domain модель, а контроллер маппить её в дто

  • @Ksushadik
    @Ksushadik 29 วันที่ผ่านมา

    Интересный подход. И всё же есть вопрос. Класс Book, тот , который домейновский, он не противоречит SOLID? Возможно, я что-то не понимаю, но здесь при создании класса у нас одновременно и состояния, и поведение и даже инициализация экземпляра этого же класса, как в Singletone, и там же - валидация. Такое ощущение, как будто мы перегружаем класс. А он является домейновским. Поправьте, если не прав. А вообще объяснение мне очень даже понравилось. Спасибо за труды. Теперь буду следить за вами. Лайк и респект за обучение

    • @Abilovv599
      @Abilovv599 11 วันที่ผ่านมา +1

      я также считаю, че то много всего происходит в одном классе

  • @Edgar-pu1lc
    @Edgar-pu1lc หลายเดือนก่อน +1

    Привет,на 1:50 про какую логику идет речь, это же просто модели,не ?

    • @KirillSachkov
      @KirillSachkov  หลายเดือนก่อน

      Про доменную логику, у моделей может быть большая логика, например модель банкомата

  • @hilton8370
    @hilton8370 5 หลายเดือนก่อน +1

    А вот ты создаешь в book.cs метод create и проверяешь title , но даже если у нас будет ошибка в любом случае сожается book ? Если я все правильно понял

    • @KirillSachkov
      @KirillSachkov  5 หลายเดือนก่อน

      Правильнее было бы, сделать возвращаемый тип Book?, и если ошибка есть, то возвращать вместо book - null. А ещё правильнее использовать тип Result, как я делаю в видео про богатую DDD модель

    • @LightChimera
      @LightChimera 4 หลายเดือนก่อน +1

      ​@@KirillSachkov, честно, не совсем понял прикол такой реализации. Даже если возвращать null, то где-то на уровень выше прийдётся каждый раз проверять, что нам вернул метод, а если где-то забыть это сделать, то все приложение сломается. Сомнительная практика. Разве не лучше просто выбрасывать исключения?

    • @KirillSachkov
      @KirillSachkov  4 หลายเดือนก่อน

      @@LightChimera Можно просто выбрасывать исключение, но это менее производительно. Тут кому как больше нравится, либо использовать тип Result и делать проверку каждый раз при создании модели или выбрасывать исключение, но жертвовать производительностью

    • @LightChimera
      @LightChimera 4 หลายเดือนก่อน +1

      ​@@KirillSachkovТеперь понял мотив, спасибо

    • @nick_stelmakh
      @nick_stelmakh 3 หลายเดือนก่อน

      @@KirillSachkov out of the blue. возвращать null? rly? это худшее зло, что коллекции, что поодиночные объекты
      вроде так не плохо все сделал и более или менее понимаешь суть, но иногда у тебя такие высказывания проскакивают, что не имеют никакого отношения к clean code, architecture.

  • @eugene-murashka
    @eugene-murashka 4 หลายเดือนก่อน

    12:38 А разве использование константы из Core слоя в Data слое не нарушает принцип обратной зависимости? Не лучше ли будет вынести константу в отдельный конфигурационный файл (например appsettings.json), где будут храниться все константы?

    • @eugene-murashka
      @eugene-murashka 4 หลายเดือนก่อน

      А еще лучше в EnvironmentVariable в файле launchSettings.json

    • @KirillSachkov
      @KirillSachkov  4 หลายเดือนก่อน +1

      Нет, не нарушает, слой Persistence имеет доступ к доменным моделям, как минимум он их возвращает и принимает в репозиториях, поэтому так можно делать. Конечно желательно, чтобы слой Persistence ссылался на Application, а Application на Domain

    • @KirillSachkov
      @KirillSachkov  4 หลายเดือนก่อน +1

      В конфиге константы хранить не лучшая идея

  • @user-ez3yr4bf5l
    @user-ez3yr4bf5l 3 หลายเดือนก่อน

    У меня постоянно лажа с зависимостями между слоями, а есть больше информации про это? То слой DAL не видит Core то В контроллерах не видно модели или интерфейсы из Core. Как их правильно настраивать, когда несколько проектов в солюшене?

    • @KirillSachkov
      @KirillSachkov  3 หลายเดือนก่อน +1

      Будет про это видео

  • @extense1337
    @extense1337 3 หลายเดือนก่อน +1

    Привет, пару небольших замечаний:
    1) Там где const string MAX_TITLE_LENGTH, лучше было его же и вписать в error, вместо магичской 250
    2) Вместо кортежа result + error как будто бы напрашивается отдельный класс (Пример у Чапсаса - th-cam.com/video/YbuSuSpzee4/w-d-xo.html)

    • @KirillSachkov
      @KirillSachkov  3 หลายเดือนก่อน +1

      Согласен, но решил не усложнять пример и показать саму концепцию, а с переменной, просто забыл так сделать)

    • @sergeyz.5845
      @sergeyz.5845 3 หลายเดือนก่อน

      про 2 - 100% надо result класс

  • @user-xs3jf1ox7i
    @user-xs3jf1ox7i 2 หลายเดือนก่อน +2

    Как сделать вижуалку такой же красивой?

    • @KirillSachkov
      @KirillSachkov  2 หลายเดือนก่อน

      Превью версия

  • @lonelypaul69
    @lonelypaul69 4 หลายเดือนก่อน +3

    Пока фронт не начал показывать, всё понятно было и без вопросов (за исключением пары моментов),
    Как только начался фронт... Я перестал улавливать логику...
    Что за иерархия папок, что за компоненты, несколько файлов с book и т.д.😅
    Ощущение, что ты спешил очень куда-то 😅

    • @KirillSachkov
      @KirillSachkov  4 หลายเดือนก่อน +1

      Признаюсь, так и было, с фронтом я в этом видео накосячил, буду теперь разбивать на части такие видео и про фронт отдельно разговаривать)

    • @lonelypaul69
      @lonelypaul69 4 หลายเดือนก่อน

      @@KirillSachkov буду ждать

    • @kirillprokhorenko3944
      @kirillprokhorenko3944 3 หลายเดือนก่อน +1

      даа, есть такое. наконец-то закончил делать, но использовал сборщик Vite, чисто из-за привычки (все 1 в один, только роутинг иначе реализовал)
      поначалу все еще понятно было, но под конец куча файлов, стейтов и все перемешалось в голове короче😓
      +либо я пропустил, либо реализация кнопки Add Books появилась магическим образом в конце видео))
      + у меня почему-то каждая карточка занимает целую строку, но с этим уже разберусь.
      А так классный урок, определенно, есть чему поучиться. Спасибо огромное

  • @user-iu6ql6kb4z
    @user-iu6ql6kb4z 4 หลายเดือนก่อน +1

    i done everything is it ok asp + next good mix

  • @makc3682
    @makc3682 2 หลายเดือนก่อน +1

    А как docker-compose up -d без докерфайла работает?

    • @KirillSachkov
      @KirillSachkov  2 หลายเดือนก่อน

      Он загружает образы(images), если запускаешь свое приложение, то сначала нужно сделать для него докер файл

    • @makc3682
      @makc3682 2 หลายเดือนก่อน +1

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

    • @KirillSachkov
      @KirillSachkov  2 หลายเดือนก่อน

      Да, и ты можешь из своего приложения сделать образ, загрузить его в докер хаб и потом оттуда загружать образ, также, как и с постгрес например

  • @rubiks7196
    @rubiks7196 4 หลายเดือนก่อน +1

    Скинь пожалуйста тему оформления в VS

    • @KirillSachkov
      @KirillSachkov  4 หลายเดือนก่อน

      Это Dracula в visual studio и dracula purple в vs code

  • @dronsan-unity7302
    @dronsan-unity7302 3 หลายเดือนก่อน +1

    в повершеле прописывал миграцию и само окно частично скрыл и не понятно, что там прописывал(

    • @KirillSachkov
      @KirillSachkov  3 หลายเดือนก่อน

      dotnet ef migrations add название миграции -p путь до проекта с dbcontext -s путь до проекта с api. В документации эта команда есть, можно загуглить dotnet ef migrations

    • @dronsan-unity7302
      @dronsan-unity7302 3 หลายเดือนก่อน

      @@KirillSachkovспасибо за объяснение!

  • @alexeybreez9102
    @alexeybreez9102 2 หลายเดือนก่อน +1

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

  • @re1mzfn426
    @re1mzfn426 5 หลายเดือนก่อน +1

    Какая тема на вс?

    • @KirillSachkov
      @KirillSachkov  5 หลายเดือนก่อน

      Dracula на vs, dracula purple на vs code

    • @re1mzfn426
      @re1mzfn426 5 หลายเดือนก่อน +1

      @@KirillSachkov спасибо

  • @medyabeats4041
    @medyabeats4041 17 วันที่ผ่านมา

    а что за язык?

  • @dm8380
    @dm8380 5 หลายเดือนก่อน +1

    Каким образом можно всему этому научиться? 😭

    • @KirillSachkov
      @KirillSachkov  5 หลายเดือนก่อน

      Да это еще только база) Ну а вообще усердными занятиями)

  • @user-qp1bg7qw1s
    @user-qp1bg7qw1s 2 หลายเดือนก่อน +2

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

  • @user-fl5xp5xp8q
    @user-fl5xp5xp8q 2 หลายเดือนก่อน +4

    Крайне малоинфлрмативный видос, объясняешь почти ничего.

  • @testservicesssss
    @testservicesssss หลายเดือนก่อน

    Для новичков плохо объяснил, а профессионал будет скучно такое.