Отличный формат роликов . После прочтения теории неплохо шлифует знания .
@cssex26922 жыл бұрын
Великолепное обьяснение!
@neliquidmusic2 жыл бұрын
Большое спасибо за ролики. Для начинающих очень быстро и непонятно конечно. Есть какая то литература, которая объясняет подробнее чтобы въехать в суть подробнее.
@BrownAleks2 жыл бұрын
А что так резко сложна то стало? 😵💫 и без картинок. Лайк конечно за мастерство. Надеюсь дальше будет понятнее, что от куда, для чего, и зачем... 👍
@june3878 Жыл бұрын
и раскрасок нет (
@fentan68067 ай бұрын
хехе, наивный
@BrownAleks7 ай бұрын
@@fentan6806 уже давно во всём разобрался. =)
@uusser2732 ай бұрын
@@BrownAleks как и где разобрался можно гайд?)
@orhanaliyev97742 жыл бұрын
Огромное спасибо , все понятно и по делу.
@ИльяИгоревич-й8е Жыл бұрын
Бля, вы все не понимаете насколько годную архитектуру чувак сделал.... Этот человек отказался от репо, потому что он шарит и знает что репо это антипаттерн
@PlatinumTechTalks Жыл бұрын
вам сарказм шикарен)
@smrsgv3 жыл бұрын
супер
@PlatinumTechTalks3 жыл бұрын
Спасибо!
@antya11266 ай бұрын
Преогромное спасибо
@Максим-ы2э1ц Жыл бұрын
А разве использование Класса Dbcontext в Domain не будет вводить нас в зависимость от фреймворка EF, на уровне Core? В схеме чистой архитектуры изображено что Уровень Core не должен зависеть от фреймворка.
@enfissione8297 Жыл бұрын
Вот тот же вопрос, зачем нашему Domain знать про EF вообще
@sergbo31147 ай бұрын
Что-то я не понял а как вы собрались использовать DbContext в Domain? Использовать бд будет Application уровень и то через его-же собственный интерфейс INotesDbContext который не зависит от EF. А реализацию интерфейса представит DI.
@winstochurgle91332 жыл бұрын
Когда нужно создавать первую миграцию?Как я понимаю, после создания уровня infrastructure? Добавив контекст в DI контейнер?
@Fikusiklol Жыл бұрын
Какие преимущества такой "реализации" репозитория через DbSet? Учитывая, что дальше используется MediatR, то вся дополнительная логика (сортировка, фильтрация, пагинация, преобразования, и тд) будет: 1) либо в Handler классах прямо в методе Handle 2) либо в доп сервисе, который нужно будет создать, который и будет фактически служить аналогом репозитория. Это же нарушает солид напрямую, т.к всегда реализация будет прямо в местах, куда прокидывается интерфейс, где есть DbSet.
@ElectroJam-t7p2 жыл бұрын
А по каким таким принципам ты берешь доменную сущность Note и используешь её в DbSet? В DbSet используются сущности, которые будут маппиться на таблицы базы данных и они должны быть развязаны с доменными сущностями. Да и вообще использование DbSet уже говорит о привязке к хранению в БД. А что если завтра я захочу хранить данные в txt файле? Для этого и придумали репозитории. Есть единый интерфейс доступа к данным, который используется приложением, а реализация может меняться и ничего не поломается. Сегодня реализация хранит данные в БД, а завтра я сделаю реализацию, которая будет хранить данные на папирусе, при этом интерфейс останется тем же и можно будет просто перерегистрировать зависимость в контейнере.
@sergbo3114 Жыл бұрын
Только хотел это написать. Как бы согласен. Да и в случае использования атрибутов для EF будет проще понимать к чему это относится(т.е. EF атрибуты должны быть у EF entities). Ну да придется копировать данные из Entity сущности в Domain сущность. Но в этом суть слоистого подхода.
@artcoed Жыл бұрын
часто на папирусе данные храните?
@ElectroJam-t7p Жыл бұрын
@@artcoed часто делаю чистые архитектуры
@artcoed Жыл бұрын
@@ElectroJam-t7p а я не про это спрашивал
@artcoed Жыл бұрын
@Сергей Шнуров вы когда реактом пользуетесь тоже абстракции поверх него строите? А вы же можете отказаться отрепозиториев, значит поверх них тоже абстракцию стоит возводить? Не стоит отвечать на неочевидные вещи банальными ответами - в этом дело
@777homosapien2 жыл бұрын
Здравствуйте. Спасибо за видимо. Подскажите, разве бизнес логику не надо выносить отдельно что бы у нас не торчали dbset из интерфейса, например в спецификацию.? Спасибо.
@BraentR3 жыл бұрын
Спасибо
@FunnyDony3 жыл бұрын
Здравствуйте, подскажите пожалуйста, что нужно поправить чтоб работать с SqlServer. Меняется же только строка подключения и в классе DependencyInjection проэкта Notes.Persistence options.UseSqlite(connectionString); на options.UseSqlServer(connectionString); или еще что-то?
@СергейДовгалев-ц1щ Жыл бұрын
не совсем понял, зачем определяем метод SaveChanges если его в дальнейшем можно вызвать из DbContext. В чем преимущество такого подхода?
@ПАВЕЛГрабовский-ш2з11 ай бұрын
Я не понимаю почему БД завит от application, я про интрефейс, который в application и используется в БД ?
@ОксанаМиколаївна-и4ч Жыл бұрын
Почему проект для БД называется Persistance?
@enfissione8297 Жыл бұрын
DbContext интерфейс должен быть в infrastructure, не в application слое
@dr1n2 жыл бұрын
Есть архитектурный изъян. Класс DbSet просочился в Application слой. Имеем зависимость Application от Infrastructure
@PlatinumTechTalks2 жыл бұрын
мы это принимаем. DbSet это часть EF, который в свою очередь уже абстракция. используя его мы всё еще независим от выбранной БД и это не противоречит принципам выбранной архитектуры. то есть тут нет прямой зависимости у Application от нашего Infrastructure, но у обоих из них есть использование EF, это правда
@МатвейЛитовченко-ч2б Жыл бұрын
@@PlatinumTechTalks на мой взгляд, получилась дырявая абстракция. Ни о какой инверсии зависимостей не может идти речь, когда у нас абстракция в Application слое зависит от DbSet. Выходит, что Application слой напрямую вызывает методы взаимодействия с сущностью бд, проходя исключительно через абстракцию над реализацией конкретных провайдеров БД. Что не избавляет нас от того, что мы ломимся в EF
@siera43332 жыл бұрын
Привет, у меня вопрос. Я не совсем понимаю почему, но EF не добавляет данные в базу, точнее так - данные есть, но они не отображаются в MSSQL менеджере. При добавлении и удалении данных всё работает как надо. Но таблицы в менеджере пустые. mdf файла в папке bin\Debag у меня нет
@Дмитрийсекрет-н7о3 жыл бұрын
Отлично. Но что то уроки по времени небольшие. Маловато будет, маловато ))
@OlegTar3 жыл бұрын
10 минут оптимально
@mvxburov3 жыл бұрын
Зато часто выходят, уж лучше так и дозированно по продолжительности, чем на 2часа и раз в 2 недели
@Дмитрийсекрет-н7о3 жыл бұрын
@@mvxburov Тоже логично )))
@PlatinumTechTalks3 жыл бұрын
тут больше зависит от концептуального разделения по темам. в итоге, где-то 5 минут ролик получается, где-то 20. но делать сильно длинные не хотелось, хотелось именно кратко и объемно
@НиколайИванов-ф3э2 жыл бұрын
Все здорово, но где продолжение? Хотелось бы узнать как ConnectionString задавать таким способом и про миграции
@PlatinumTechTalks2 жыл бұрын
Про EF Core на канале есть отдельное видео с примерами: kzbin.info/www/bejne/m3nEqoifpqeLgZY
@rustrar28742 жыл бұрын
Спасибо за уроки, очень полезно! Такой вопрос возник - для чего в интерфейсе INotesDBContext определен метод SaveChangesAsync? если он итак уже реализован в DbContext?
@vanikhachatryan33942 жыл бұрын
Да, тоже не понял зачем он в интерфейсе вообще
@PlatinumTechTalks2 жыл бұрын
Мы DbContext используем через dependency injection и используем интерфейс INotesDbContext и методы, объявленные в нем. То есть так как мы в командах не используем DbContext напрямую, то и о методе SaveChangesAsync из DbContext’а командам ничего не известно. Тут и приходит на помощь метод из интерфейса
@rustrar28742 жыл бұрын
@@PlatinumTechTalks Понял, спасибо за разъяснение )
@Desu_Desu2 жыл бұрын
@@PlatinumTechTalks а как у вас студия не ругается на отсутствие реализации этого интерфейсного метода в классе?
@PlatinumTechTalks2 жыл бұрын
Реализация присутствует в базовом классе (DbContext), наш класс её наследует
@krahmaletskrakmalets75872 жыл бұрын
Привет! Подскажите : Если сущностей несколько то как поступить? Делать на каждую сущность контекст или один класс контекста, в котором осуществляется управление всеми сущностями?
@maflend27622 жыл бұрын
Один контекст для всех сущностей которые хранятся в бд
@krahmaletskrakmalets75872 жыл бұрын
@@maflend2762 спасибо
@this_is_denys2 жыл бұрын
@@maflend2762 Интерфейс дб контекста тоже один на все сущности в базе, или интерфейсы отдельные под каждую сущность и потом реализация всех этих интерфейсов в одном классе дб контекста?
@this_is_denys2 жыл бұрын
@@maflend2762 И как быть с классами конфигурации и сущностей? Классы сущностей лучше хранить по разным файлам, но в одной папке в проекте .Domain или вообще все в одном файле? И класс конфигурации один на все сущности или для каждой сущности свой и так же в отдельном файле, но в одной папке?
@sergeyomel2 жыл бұрын
@@this_is_denys Нашли ответ на ваш вопрос? Столкнулся с таким же
@bek150719913 жыл бұрын
Подача супер! Не коротко и не мало инфы ! А может ли entity framework разделять на bounded context как в нхибернейте? Ну чтобы было несколько контекстов которые не зависят друг от друга и которые нормально мигрируются?
@PlatinumTechTalks3 жыл бұрын
Спасибо большое за отзыв!! Можно делать всё что угодно :) про DDD и EF можно например посмотреть этот доклад: kzbin.info/www/bejne/kGeVlJWma5Z1mJo
@BrostylesCat2 жыл бұрын
вроде все повторила но нет using Notes.Domain , версия 6,0 Core
@BrostylesCat2 жыл бұрын
капец, кликнула на и уже от туда добавила using ,а так небыло)) ну и ладно
@BrostylesCat2 жыл бұрын
блиииин в интерфейсах тоже самое тока тут не подтягиваеться....
@BrostylesCat2 жыл бұрын
вторая ошибка была в том что силку добавила не на Domein , а на NoteAplication)Можно смотреть дальше видио
@this_is_denys2 жыл бұрын
Насколько трудно будет сделать/переделать приложение под MySQL, а не SQLite, руководствуясь этим вашим плейлистом? Много кода менять придется?
@PlatinumTechTalks2 жыл бұрын
Вам нужно будет поменять строку подключения и провайдера в уровне Persistence. Остальное без изменений, в этом весь смысл независимости в чистой архитектуре от всего внешнего
@ИльяКурашов-г7ж3 жыл бұрын
Здравствуйте! спасибо за уроки!! в процессе просмотра возникли сл. вопросы: Почему Ваша студия не отражает ссылки на свойства, методы, классы? 7:04 - не пользуетесь подсказками (чисто теоретически выскакивает помощник, который поможет реализовать интерфейс) пишите вручную юзинги. знак => отображается как ⇒ Странная у вас студия)) почему так?
@PlatinumTechTalks3 жыл бұрын
Здравствуйте! Спасибо вам! Всё прописывалось вручную чтобы было понятно откуда что идет.в реальной жизни пользуемся подсказками конечно же. Стрелочка и прочее - это специально разработанный шрифт для чтения кода от компании JetBrains.скачать можно на их официальном сайте
@LordAlanttt3 жыл бұрын
database first кажется убрали кже
@НиколайКоваленко-г2к7 ай бұрын
куда убрали?
@Vladiliano Жыл бұрын
Ничего не понял, ну ладно на превьюшке написано "профессионально"
@ak_nex3 жыл бұрын
Что-то не пойму, зачем нужен INotesDbContext, если для тестов можно с таким же успехом подключить EF In-Memory, а то и вообще запустить в памяти Sqlite (с родным вендором код при тесте уж точно отработает именно так, как в реальности)? А моки дадут такой же результат, как и EF InMemory (хотя не, вызов SaveChanges() не отследить)
@PlatinumTechTalks3 жыл бұрын
INotesDbContext - это описание контракта, мы его можем использовать хоть по всему приложению (и позже это сделаем), а NotesDbContext - это конкретная реализация интерфейса INotesDbContext, которую в целом можно подменить на любую другую реализацию такого же интерфейса (например на DbContext с PostgreSQL) и все части приложения, использующие у себя INotesDbContext подхватят новую реализацию. Для тестов да, использование EF In-Memory очень правильный вариант. Мы используем наш DbContext, но в параметрах указывем In-Memory базу данных, тем самым абстрагируясь от той, которую используем в действительности.
@PlatinumTechTalks3 жыл бұрын
То есть основная идея тут следующая: интерфейс объявлен на уровне Application и будет использоваться в слое Сценарии (предыдущее видео про чистую архитектуру). Этот уровень оперирует абстракциями и не знает ничего про то как оно реализовано во внешнем мире. Проект Persistence - это уже внешний слой, содержащий реализацию
@ak_nex3 жыл бұрын
@@PlatinumTechTalks Аа, это для инверсии зависимости, тогда понятно) Всё репозитории из головы не выйдут, вот и забыл про этот момент)) Интересный подход, надо будет обдумать на досуге. Но, наверное, обращение к DbSet через Linq для условного MongoDb сложновато будет обернуть :( То есть с репозиториями архитектуру можно было бы сделать чище: стало бы возможным менять ORM или провайдеры баз, неподдерживаемых EF-ом. С другой стороны, если пренебрегнуть гибкостью в этом плане, то будет чище кодовая база: не будет репозиториев, а все обращения к коллекциям сущностей будут инкапсулированы в обработчиках команд/запросов, что, вероятно, мы и увидим в следующих выпусках :-). Правда в этом случае INotesDbContеxt служит лишь для красивой картинки зависимостей, которая не будет отражать реалии, т.к. EF в данном случае подменить не получится... Поэтому всё-таки встаёт вопрос: почему без репозиториев? Очень высока вероятность, что заметки захочется хранить в NoSql, а само приложение не выйдет настолько большим, чтобы репозитории распухли) Надеюсь, не слишком много тут пишу) Занимательная тема) хочется подискутировать и узнать опыт других)
@ak_nex3 жыл бұрын
Кстати, для перехода на Postgresql и любой другой провайдер, поддерживаемый EF-ом, интерфейс INotesDbContext тоже мало чем поможет, ведь для этого будет достаточно подменить options в фабрике создания NotesDbContext в DI-контейнере. А вот будут ли после этого linq-запросы транслироваться в ожидаемый sql-запрос - это ещё вопрос...
@PlatinumTechTalks3 жыл бұрын
Репозторий - это абстракция. а EF сам и предоставляет эту абстракцию. Совершенно другой разговор, если вдруг команда решает что для проекта EF это кусок чего-то нехорошего и решает, что давайте даппер, например, использовать А так с точки зрения потребления кода нет разницы репозиторий или DbSet. DbSet - делает тоже самое. Что касается тестирования. Надо исходить из задач. Несмотря на то, что InMemory вариант неплохой, он не всегда может подойти (кстати, сам майкрософт не рекомендует использовать InMemory). У нас например возникала проблема с констрейнами. то есть, имеются проблемы тестирования схемы базы. Но для тестирования логики подходит. А если нужно тестировать с базой, то это уже вопрос о развертывании интеграционных тестов. Что касается NoSQL, то например Cosmos DB - это NoSQL база и EF Core её поддерживает. То есть о том как DbSet работает с NoSQL - это не наша забота, это ответственность провайдеров. INotesDbContex для перехода не нужен, достаточно заменить options, но новый DbContext будет реализовывать всё тот же интерфейс INotesDbContext, который мы используем в приложении.приложению неважно какой DbContext использовать потому что это уже уровень внешних деталей, а внутри мы оперируем абстракциями.
@dv31482 жыл бұрын
kzbin.info/www/bejne/rZypZJapo9plnqc Возможно, вызов base.OnModelCreating должен быть все-таки ДО вызова прочих методов от builder? В моем случае, вызов метода base.OnModelCreating, например, после вызова builder.ApplyConfigurationsFromAssembly, реконфигурирует типы entity по своему (т.е. по дефолту). Так, вызов метода base.OnModelCreating убивает мою настройку целевой таблицы ToTable, сделанной посредством ETC в указанной мною сборке.
@3dmboy2 жыл бұрын
Для новичка довольно сложное объяснение. К каждому предложению возникает много вопросов (
@PlatinumTechTalks2 жыл бұрын
спасибо за отклик, изначально не планировалось что это для новичка :) тут вообще каждая отдельная тема заслуживает отдельного курса... конечно всё не охватить в коротких видео
@martahnat11463 жыл бұрын
Привіт, а у visual code немає Microsoft Entity Framework Core.Sqlitе, що можна використати замість цього?)
@PlatinumTechTalks3 жыл бұрын
спробуйте через .NET CLI: dotnet add package Microsoft.EntityFrameworkCore.Sqlite --version 5.0.11
@nikolaifedorov685 Жыл бұрын
FluentApi читается легче - аргументация от мамкиного архитектора. Какая гибкость? уже несколько лет сталкиваюсь вот с такими мамкинами архитекторами, которые предлагаю использовать FluentAPI. Это приводит к том, что ты не видишь настоящего названия столбца в таблице, не видишь наложенных констрейнтов. Тебе для этого приходится искать где находится файл с флюентом. Слава богу удалось в одном месте убедить уйти от FluentAPI. Легче читается это когда ты видишь мэппинг свойства на столбец и прочие атрибуты столбца. Зачем вы предлагаете открывать два файла, когда можно открыть один?
@scc-6 Жыл бұрын
Кто из 2023го. Устанавливайте нагет 7й версии, мой ругается на 7й кор
@termineye111 Жыл бұрын
ужасная подача без визуализации и объяснения, а за одно с бешеным темпом
@ДжигурдаДжигуртаниан Жыл бұрын
темп и вправду жоский, пришлось х1.75 даж выключать)
@ВладимирКрасный-о2б2 жыл бұрын
всем привет! Можете подсказать в чем проблема? protected override void OnModelCreating(ModelBuilder builder) { builder.ApplyConfiguration(new NoteConfiguration()); base.OnModelCreating(builder); } выдает ошибку: Severity Code Description Project File Line Suppression State Error CS0411 The type arguments for method 'ModelBuilder.ApplyConfiguration(IEntityTypeConfiguration)' cannot be inferred from the usage. Try specifying the type arguments explicitly. Notes.Presistence C:\Users\krasn\source epos\Notes.Backend\Notes.Presistence\NotesDbContext.cs 17 Active