Тёмный

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

Kirill Sachkov - Development
Подписаться 9 тыс.
Просмотров 34 тыс.
50% 1

Опубликовано:

 

29 окт 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 127   
@KirillSachkov
@KirillSachkov 10 месяцев назад
В итоге мало чего объяснил и подача оставляет желать лучшего. В следующих видео постараюсь сделать качественнее, а это можете смело ставить на 2х. Мой телеграм канал - t.me/sachkov_blog
@IvanKadrov-e7l
@IvanKadrov-e7l 10 месяцев назад
Спасибо за труд. Наоборот, всё очень понятно и доходчиво) Очень полезно и всё доходчиво. Я бэкендер
@KirillSachkov
@KirillSachkov 10 месяцев назад
@@IvanKadrov-e7l Спасибо!
@bloodymanchenal9281
@bloodymanchenal9281 8 месяцев назад
Всё замечательно. Понятно что дальше лучше. Самое главное не опускай руки, так как по .NET очень мало свежих видео и я очень рад что нашёл твой канал так как он очень сильно помог мне в понимание мелких деталей .NET. Спасибо большое)))
@nick_stelmakh
@nick_stelmakh 8 месяцев назад
продолжай, все учатся на ошибках - главное их замечать и признавать.
@polyfem128
@polyfem128 7 месяцев назад
Смотрел на 1х не отрываясь
@ВасилийКондратьев-п1в
@ВасилийКондратьев-п1в 9 месяцев назад
Шикарно, большое спасибо! Наконец-то кто-то приводит пример, приближенный к реальной разработке
@yakov.lopatin
@yakov.lopatin 10 месяцев назад
Хоть видео и длинное, но посмотрел на одном дыхании, стал больше понимать, как работает приложение в целом, спасибо
@KirillSachkov
@KirillSachkov 10 месяцев назад
Спасибо!
@SonicMusics
@SonicMusics 9 месяцев назад
Опа, это я удачно зашел. Хорошо объясняешь, продолжай в том же духе.
@julik_r
@julik_r 10 месяцев назад
Я фронтендер, появилось больше понимания, как работает бэкенд. Спасибо за видео!)
@KirillSachkov
@KirillSachkov 10 месяцев назад
Спасибо!
@underground49
@underground49 9 месяцев назад
Кирилл огромное тебе спасибо!!! Давно хотел фронт пощупать, ты вдохновил)
@bogdanlistopad271
@bogdanlistopad271 8 месяцев назад
@KirillDeveloper видео понравилось, но пример уж слишком простой в данном случае. Мне кажется стоило добавить еще несколько связанных между собой сущностей, чтобы показать как реализовать эту связь в моделях и репозиториях, например как в видео по EF. В любом случае благодарю за видео, продолжай!
@Nik-cv5bi
@Nik-cv5bi 14 дней назад
Спасибо за видео, часть с бэкендом даже для меня довольно понятная была, кое что позаимствую в свой проект)
@Im_like_Merphy
@Im_like_Merphy 8 месяцев назад
Спасибо большое! Очень познавательное видео.
@АртакМирзоян-л3б
@АртакМирзоян-л3б 6 месяцев назад
Gоod !!! больше нечего и не нужно говорить! спасибо за ваш труд!
@vitaliyschweigen4833
@vitaliyschweigen4833 6 месяцев назад
Привет. Не мог бы ты пояснить момент. Не понятен смысл существования BookEntity. Действительно ли нам нужно, используя EF codefirst и миграции, юзать эту прослойку? Какие проблемы мы этим решаем? В твоем примере получается просто валидация при чтении из БД, зачем оно надо не понятно. За труды Спасибо, это самый лучший мануал по теме, который мне удалось найти.
@sherlockholmes5395
@sherlockholmes5395 8 месяцев назад
Thanks a million for your video it's a good lesson for me. i made api and I will be doing next super Welldone!!!
@graffoman
@graffoman 5 месяцев назад
Очень интересный видос. Многое непонятно, но это даже здорово, т.к. захотелось углубиться и погуглить отдельно некоторые моменты. Я далек от фронта, но тоже было интересно, хотелось с чего-то начать. Почему бы не начать с того, что предлагает автор. Думаю, что пересмотрю видео ещё раз. Спасибо 😊
@sakenjs
@sakenjs 3 месяца назад
Спасибо! Узнал много нового, то что не было понятно спросил у Claude
@sakenjs
@sakenjs 3 месяца назад
record - это функция, введенная в C# 9.0 (выпущена в 2020 году), которая позволяет создавать неизменяемые (immutable) ссылочные типы с меньшим количеством шаблонного кода. Основные характеристики record: Неизменяемость по умолчанию Автоматическая реализация методов Equals(), GetHashCode() и ToString() Поддержка деконструкции Возможность использования позиционных параметров
@sakenjs
@sakenjs 3 месяца назад
Docker - это платформа для разработки, доставки и запуска приложений в контейнерах
@sakenjs
@sakenjs 3 месяца назад
Docker Compose - это инструмент для определения и управления многоконтейнерными приложениями Docker
@sakenjs
@sakenjs 3 месяца назад
AsNoTracking() - это метод в Entity Framework Core, который используется для оптимизации производительности при выполнении запросов только для чтения
@sakenjs
@sakenjs 3 месяца назад
ExecuteUpdateAsync и ExecuteDeleteAsync - это методы, добавленные в Entity Framework Core 7.0, которые позволяют выполнять массовые операции обновления и удаления без необходимости сначала загружать сущности в память
@Polite_person_
@Polite_person_ 9 месяцев назад
Спасибо, то что нужно.
@КылымбекЖенишбеков-х2я
Добрый день! Я новичок в чистой архитектуре и на пути изучения. У меня появились вопросы. 1) слой core как я понимаю - это доменный слой( бизнес слой, ядро). Если модели данного слоя это бизнес сущность, то не должны ли все остальные слои зависеть от данного слоя? 2) Могу ошибаться, поправьте, пожалуйста, но если в бизнес сущностях что-то поменяется, то нам надо будет в двух слоях менять? 3) Как я понимаю, сеттеры не добавлены были, дабы, проконсультировать нежелательные вставки в свойства? А нельзя ли это проконтролировать в слое выше, в application, так как это слой бизнес процессов. Так же, не протаскивать доменную сущность до слоя Api. Так же, нормально ли в контроллерах выполнять дополнительные действия такие как силекты и прочее, если их можно в слое application, так как повторюсь, это слой бизнес процессов? За ранее спасибо! Я ни в коем случае, не хочу никого задеть, это в целях улучшить знания свои и получить фидбек по пробелам.
@ДимаОщепков-к8д
@ДимаОщепков-к8д 3 дня назад
Помогите понять чистую архитектуру. Почему в слое DataAccess есть зависимости от EF Core? Я везде нахожу информацию, что зависимости от фреймворков должны быть в .Infrastracture. Это нормальная практика или упрощение? Заранее спасибо
@DerzoMelon
@DerzoMelon 4 дня назад
на момент с "dotnet ef migrations add " выдет ошибку "Не удалось выполнить, поскольку указанная команда или файл не найдены." В чем может быть дело?
@yaroslav.shamov
@yaroslav.shamov 9 месяцев назад
Спасибо за видео!
@xd6369
@xd6369 Месяц назад
Не знаю задавал ли кто-то этот вопрос, но кто подскажет. В самом начале, когда создавался класс Book, то мы сделали доступное создание новых объектов через статический конструктор. Есть ли название у такого подхода, чтобы почитать побольше или понимать когда его лучше всего использовать? Или возможно это просто элемента какого нибудь паттерна проектирования?
@just_ondrey1032
@just_ondrey1032 Месяц назад
Классный видос, очень помог, Спасибо! еще возник не по теме вопрос, что за тема в vs у тебя?
@mrdgnf
@mrdgnf 16 дней назад
Хотел спросить, разве валидация на основе атрибутов не более практична? она ведь выглядит проще читается лучше, и в целом более гибкая
@yevhenzoria9532
@yevhenzoria9532 8 месяцев назад
Спасибо, очень познавательно. Есть вопрос: чем плох шаблон "React and ASP.NET Core"? Его используют на практике, или все же обычно используют разделение frontend/backend как в ролике? Спасибо.
@KirillSachkov
@KirillSachkov 8 месяцев назад
Большинство разделяют проекты, чтобы все деплоилось независимо + в шаблоне используется сборщик vite, кому-то может не нравится. Просто если создашь отдельно фронт, то можно вести себя гибче, менять сборщики и тд, поэтому рекомендую делать раздельно
@RichardTheLionJokes
@RichardTheLionJokes Месяц назад
Получается, что валидация происходит не только при создании новой книги, но и каждый раз при получении книг из базы, т.к. там тоже вызывается метод Create. Не будет ли это лишним, в базу ведь и так могли попасть только проверенные значения?
@ЛеонидЗиновьев-з5у
Не нашёл в тг канале ссылку на гитхаб, можно пожалуйста её?
@Enigma-mv6ss
@Enigma-mv6ss 9 месяцев назад
В некоторых случаях dto же находится на уровне бизнес логики , то есть логика возвращает нужный объект для контроллера , а контроллер просто возвращает , то есть в контроллере минимум логики. Такой вариант более правильнее ?
@KirillSachkov
@KirillSachkov 9 месяцев назад
Зависит от подхода, но если это подход контролер, сервис, репозиторий, то сервис должен возвращать Domain модель, а контроллер маппить её в дто
@behemoth1621
@behemoth1621 5 месяцев назад
Добрый день!Спасибо за материал!А есть ссылка на гит с кодом?
@sergeyz.5845
@sergeyz.5845 7 месяцев назад
[15:55] Вызов Select после ToListAsync? надо до превращения в лист мэпить. запрос в бд будет чаще всего короче и не придется после создания листа итерироваться по новой
@sergeyz.5845
@sergeyz.5845 7 месяцев назад
в примечании microsoft рекомендует использовать Add, кроме некоторых исключительных случаев
@murr_ka4374
@murr_ka4374 6 месяцев назад
Как ты в Visual Studio сделал внешний вид, наподобие внешнего вида vs code?
@KirillSachkov
@KirillSachkov 6 месяцев назад
Это preview версия
@extense1337
@extense1337 7 месяцев назад
Привет, пару небольших замечаний: 1) Там где const string MAX_TITLE_LENGTH, лучше было его же и вписать в error, вместо магичской 250 2) Вместо кортежа result + error как будто бы напрашивается отдельный класс (Пример у Чапсаса - ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-YbuSuSpzee4.html)
@KirillSachkov
@KirillSachkov 7 месяцев назад
Согласен, но решил не усложнять пример и показать саму концепцию, а с переменной, просто забыл так сделать)
@sergeyz.5845
@sergeyz.5845 7 месяцев назад
про 2 - 100% надо result класс
@alexandralikin3830
@alexandralikin3830 7 месяцев назад
Кирилл, есть возможность предоставить гитхаб с этим проектом?
@KirillSachkov
@KirillSachkov 7 месяцев назад
Позже в телеграм канале выложу
@asli9152
@asli9152 3 месяца назад
Искал любой норм asp тутор, а нашёл золото!
@Edgar-pu1lc
@Edgar-pu1lc 6 месяцев назад
Привет,на 1:50 про какую логику идет речь, это же просто модели,не ?
@KirillSachkov
@KirillSachkov 6 месяцев назад
Про доменную логику, у моделей может быть большая логика, например модель банкомата
@АлексейАлександрович-с4д3м
У меня постоянно лажа с зависимостями между слоями, а есть больше информации про это? То слой DAL не видит Core то В контроллерах не видно модели или интерфейсы из Core. Как их правильно настраивать, когда несколько проектов в солюшене?
@KirillSachkov
@KirillSachkov 8 месяцев назад
Будет про это видео
@Easycore2000
@Easycore2000 9 месяцев назад
Есть ли смысл использовать шаблон c реактом в VS, там где сборщик vite?
@KirillSachkov
@KirillSachkov 9 месяцев назад
Ещё не использовал vite, но как минимум для изучения, смысл есть
@moon5964
@moon5964 5 месяцев назад
Забавный момент который я не сразу заметил. Тут создается контейнер в Докере и запускается но используется при этом обычный сервер Postgresql если я правильно понял. То есть в данном случаи создание контейнера используется как создание БД схемы а работа с БД ведется напрямую через локальный установленный скорее всего сервер Postgresql, а не в докера , ибо если остановить работу контейнера, то о чудо, работа апи не будет выбрасывать ошибки, что докажет что апи работает с сервером. Но видео при этом очень полезное и достаточно хорошо показывает БАЗУ!)
@timur2887
@timur2887 3 месяца назад
Метко подмечено, в строке соединения должен был бы быть не Host=localhost, а Host=postgres, то есть имя контейнера в докере...
@kostyabetenya6509
@kostyabetenya6509 2 месяца назад
Подскажите пожалуйста, как он может обращаться к именам других решений. Я имею ввиду, как, будучи в проекте BookStore.DataAccess он может обращаться к моделям из BookStore.Core. таймкод: 12:24
@ГерманПопов-х1й
@ГерманПопов-х1й 2 месяца назад
пространства имен подключай
@ГерманПопов-х1й
@ГерманПопов-х1й 2 месяца назад
+ еще надо ссылку на проект добавить
@hilton8370
@hilton8370 9 месяцев назад
А вот ты создаешь в book.cs метод create и проверяешь title , но даже если у нас будет ошибка в любом случае сожается book ? Если я все правильно понял
@KirillSachkov
@KirillSachkov 9 месяцев назад
Правильнее было бы, сделать возвращаемый тип Book?, и если ошибка есть, то возвращать вместо book - null. А ещё правильнее использовать тип Result, как я делаю в видео про богатую DDD модель
@LightChimera
@LightChimera 8 месяцев назад
​@@KirillSachkov, честно, не совсем понял прикол такой реализации. Даже если возвращать null, то где-то на уровень выше прийдётся каждый раз проверять, что нам вернул метод, а если где-то забыть это сделать, то все приложение сломается. Сомнительная практика. Разве не лучше просто выбрасывать исключения?
@KirillSachkov
@KirillSachkov 8 месяцев назад
@@LightChimera Можно просто выбрасывать исключение, но это менее производительно. Тут кому как больше нравится, либо использовать тип Result и делать проверку каждый раз при создании модели или выбрасывать исключение, но жертвовать производительностью
@LightChimera
@LightChimera 8 месяцев назад
​@@KirillSachkovТеперь понял мотив, спасибо
@nick_stelmakh
@nick_stelmakh 8 месяцев назад
@@KirillSachkov out of the blue. возвращать null? rly? это худшее зло, что коллекции, что поодиночные объекты вроде так не плохо все сделал и более или менее понимаешь суть, но иногда у тебя такие высказывания проскакивают, что не имеют никакого отношения к clean code, architecture.
@Vilgefortz13
@Vilgefortz13 4 месяца назад
а откуда взять docker-compose файл?
@a_s_f_a5351
@a_s_f_a5351 14 дней назад
Узнал откуда?
@Vilgefortz13
@Vilgefortz13 14 дней назад
@@a_s_f_a5351 нет, в ручную переписал
@nikartom
@nikartom 3 месяца назад
Мы в куче разных мест используем поля Guid Id, string Name и тд. И в будущем если появится новое поле, то его надо так же везде в куче мест добавить. Нельзя где-то в одном месте их прописать и во всех классах использовать?
@Jesiksss
@Jesiksss 3 месяца назад
Ну технически, можно сделать какой то абстрактный класс, от которого мы будем наследоваться, но добавлять эти поля create и update все равно придется(
@proger2396
@proger2396 6 месяцев назад
Сделай еще одно такое видео просто создай полноценный проект и сразу на видео покажи как в нитернет опубликовать проект
@it-tb8od
@it-tb8od 6 месяцев назад
То чувство когда выучил базовый синтаксис и понимаешь, что дальше уже ничего не понимаешь
@govoryashchie
@govoryashchie 5 месяцев назад
Интересный подход. И всё же есть вопрос. Класс Book, тот , который домейновский, он не противоречит SOLID? Возможно, я что-то не понимаю, но здесь при создании класса у нас одновременно и состояния, и поведение и даже инициализация экземпляра этого же класса, как в Singletone, и там же - валидация. Такое ощущение, как будто мы перегружаем класс. А он является домейновским. Поправьте, если не прав. А вообще объяснение мне очень даже понравилось. Спасибо за труды. Теперь буду следить за вами. Лайк и респект за обучение
@Abilovv599
@Abilovv599 4 месяца назад
я также считаю, че то много всего происходит в одном классе
@eugene-murashka
@eugene-murashka 9 месяцев назад
12:38 А разве использование константы из Core слоя в Data слое не нарушает принцип обратной зависимости? Не лучше ли будет вынести константу в отдельный конфигурационный файл (например appsettings.json), где будут храниться все константы?
@eugene-murashka
@eugene-murashka 9 месяцев назад
А еще лучше в EnvironmentVariable в файле launchSettings.json
@KirillSachkov
@KirillSachkov 9 месяцев назад
Нет, не нарушает, слой Persistence имеет доступ к доменным моделям, как минимум он их возвращает и принимает в репозиториях, поэтому так можно делать. Конечно желательно, чтобы слой Persistence ссылался на Application, а Application на Domain
@KirillSachkov
@KirillSachkov 9 месяцев назад
В конфиге константы хранить не лучшая идея
@dronsan-unity7302
@dronsan-unity7302 8 месяцев назад
в повершеле прописывал миграцию и само окно частично скрыл и не понятно, что там прописывал(
@KirillSachkov
@KirillSachkov 8 месяцев назад
dotnet ef migrations add название миграции -p путь до проекта с dbcontext -s путь до проекта с api. В документации эта команда есть, можно загуглить dotnet ef migrations
@dronsan-unity7302
@dronsan-unity7302 8 месяцев назад
@@KirillSachkovспасибо за объяснение!
@makc3682
@makc3682 7 месяцев назад
А как docker-compose up -d без докерфайла работает?
@KirillSachkov
@KirillSachkov 7 месяцев назад
Он загружает образы(images), если запускаешь свое приложение, то сначала нужно сделать для него докер файл
@makc3682
@makc3682 7 месяцев назад
@@KirillSachkov Тоесть если тебе нужен постгре то достаточно докер-композ, но если хочешь в докер контейнер положить свое приложение, тогда нужен докерфайл. Понял. Спасибо.
@KirillSachkov
@KirillSachkov 7 месяцев назад
Да, и ты можешь из своего приложения сделать образ, загрузить его в докер хаб и потом оттуда загружать образ, также, как и с постгрес например
@Xor0x
@Xor0x 5 месяцев назад
Странно я все делаю как на видео но у меня выдаёт ошибку в Programs.cs а именно в IBooksService и IBooksService он не видит их хоть я ссылку даю.
@opilochka-yw8xg
@opilochka-yw8xg Месяц назад
Как ты решил эту проблему?
@tojifu6higuro
@tojifu6higuro 6 месяцев назад
Как сделать вижуалку такой же красивой?
@KirillSachkov
@KirillSachkov 6 месяцев назад
Превью версия
@Jesiksss
@Jesiksss Месяц назад
есть тема Rider, это не та тема, но тоже красивая
@Дмитрийсекрет-н7о
@Дмитрийсекрет-н7о 9 месяцев назад
Это я удачно залетел. Давно хотел пощупать React за мяхкое место. С меня лайк и подписка. Так држать. И сразу вопрос. Можно ли добавть итолько страницу на реакте. В Существующие mvc приложение net core 6. Например реализовать админку и странице статистики по каким нибуть item"s?
@KirillSachkov
@KirillSachkov 9 месяцев назад
Спасибо! По идее можно, есть интеграции react в asp net mvc, есть nuget библиотеки для этого, после установки можно будет использовать файлы jsx.
@Дмитрийсекрет-н7о
@Дмитрийсекрет-н7о 9 месяцев назад
@@KirillSachkov Вот и готовая идея для реализации любителей нестандртного програмирования ))
@nouchance
@nouchance 9 месяцев назад
spasibo!
@alexeybreez9102
@alexeybreez9102 7 месяцев назад
Мой опыт и здравый смысл говорит, что в данном типе приложений, где по сути только CRUD, использование репозиториев бессмысленно.
@erproerpro903
@erproerpro903 10 месяцев назад
Молодец 👍
@rubiks7196
@rubiks7196 9 месяцев назад
Скинь пожалуйста тему оформления в VS
@KirillSachkov
@KirillSachkov 9 месяцев назад
Это Dracula в visual studio и dracula purple в vs code
@timur2887
@timur2887 3 месяца назад
Зачем классы использовать в таких моделях, есть же рекорды? В три раза меньше писанины, а валидацию вынести в отдельные классы с использованием FluentValidation... По поводу архитектуры мог бы порекомендовать вертикальные срезы - хорошо на скрам ложится, например: ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-msjnfdeDCmo.htmlsi=Iq6zal9K3DCAAIwE
@lullaby-c3i
@lullaby-c3i 8 месяцев назад
i done everything is it ok asp + next good mix
@eqspertars4062
@eqspertars4062 2 месяца назад
В целом для новичка норм, но namespace...Боль и еще раз боль!
@АндрейКаллаур-й2н
@АндрейКаллаур-й2н 2 месяца назад
ты не мог оставить код. Где код всего этого
@medyabeats4041
@medyabeats4041 5 месяцев назад
а что за язык?
@KirillSachkov
@KirillSachkov 5 месяцев назад
C#
@re1mzfn426
@re1mzfn426 10 месяцев назад
Какая тема на вс?
@KirillSachkov
@KirillSachkov 10 месяцев назад
Dracula на vs, dracula purple на vs code
@re1mzfn426
@re1mzfn426 10 месяцев назад
@@KirillSachkov спасибо
@dm8380
@dm8380 10 месяцев назад
Каким образом можно всему этому научиться? 😭
@KirillSachkov
@KirillSachkov 10 месяцев назад
Да это еще только база) Ну а вообще усердными занятиями)
@GustavoFring-f8z
@GustavoFring-f8z 6 месяцев назад
гайд слабый, хоть и понятно, что хотел донести автор, но всё-таки хотелось бы знать, почему так или не так сделано в каком-то конкретном случае(именно ход мыслей и логическое рассуждение, подкрепленнённые фактами из реальной разработки), понимаю, первое видео - проба пера, и в будущем будет лучше, но на такие вещи сразу лучше обращать внимание
@АндрейКаллаур-й2н
@АндрейКаллаур-й2н 2 месяца назад
так себе. одни нервы. так и не получилось. оказывается на просторах интернета трудно найти. Обычно GRUD приложение
@AndreyKochanov
@AndreyKochanov 7 месяцев назад
Крайне малоинфлрмативный видос, объясняешь почти ничего.
@testservicesssss
@testservicesssss 5 месяцев назад
Для новичков плохо объяснил, а профессионал будет скучно такое.
@lonelypaul69
@lonelypaul69 9 месяцев назад
Пока фронт не начал показывать, всё понятно было и без вопросов (за исключением пары моментов), Как только начался фронт... Я перестал улавливать логику... Что за иерархия папок, что за компоненты, несколько файлов с book и т.д.😅 Ощущение, что ты спешил очень куда-то 😅
@KirillSachkov
@KirillSachkov 9 месяцев назад
Признаюсь, так и было, с фронтом я в этом видео накосячил, буду теперь разбивать на части такие видео и про фронт отдельно разговаривать)
@lonelypaul69
@lonelypaul69 9 месяцев назад
@@KirillSachkov буду ждать
@kirillprokhorenko3944
@kirillprokhorenko3944 7 месяцев назад
даа, есть такое. наконец-то закончил делать, но использовал сборщик Vite, чисто из-за привычки (все 1 в один, только роутинг иначе реализовал) поначалу все еще понятно было, но под конец куча файлов, стейтов и все перемешалось в голове короче😓 +либо я пропустил, либо реализация кнопки Add Books появилась магическим образом в конце видео)) + у меня почему-то каждая карточка занимает целую строку, но с этим уже разберусь. А так классный урок, определенно, есть чему поучиться. Спасибо огромное
Далее
SENIOR on JUNIOR Javascript Developer interview
26:35
Просмотров 332 тыс.
ХУДШИЕ ВЫБОРЫ в США
13:20
Просмотров 505 тыс.
Clean Architecture with ASP.NET Core 8 | .NET Conf 2023
29:17
Redis за 20 минут
23:22
Просмотров 151 тыс.