C# Архитектура приложения | Трёхзвенная(трёхуровневая) архитектура

Поделиться
HTML-код
  • Опубликовано: 20 окт 2024

Комментарии • 91

  • @k1ntoho
    @k1ntoho 3 года назад +6

    Охренительный ролик, как раз то, что искал! Спасибо большое

  • @АлисаЛис-л3б
    @АлисаЛис-л3б 4 года назад +3

    Хочу еще Ваши уроки по C#!!!!!!!!!!!! Лучшее объяснение что когда либо слышала!!!!!

    • @AlexCSharp
      @AlexCSharp  4 года назад +2

      Я планирую записать ещё. Как будет время. )

    • @jocker4396
      @jocker4396 3 года назад

      @@AlexCSharp Жду новые уроки, отличная лекция

  • @nursultanmamytbekov8180
    @nursultanmamytbekov8180 3 года назад +4

    Спасибо за лекцию! Очень информативно и понятно. Жду продолжения!

  • @АлисаЛис-л3б
    @АлисаЛис-л3б 4 года назад +2

    Лучшее по архитектуре! Спасибо!!!!

  • @Keeytari
    @Keeytari 4 года назад +4

    Спасибо большое за ваш урок! Очень понравился! Пожалуйста, не останавливайтесь и продолжайте выпускать видео по C#, у вас очень хорошо получается!

    • @AlexCSharp
      @AlexCSharp  4 года назад +2

      Спасибо! Я планирую)

    • @Keeytari
      @Keeytari 4 года назад +1

      @@AlexCSharp Кстати, делай репозитории на GitHub для каждого урока, это очень полезно. Есть канал CodeBlog тоже учит C#'пу (Немного о нем: Зовут Вадим, 8 лет уже работает на шарпе) и вот он делает на каждый урок свой репозиторий. Просто когда я делаю программы, я частенько залажу на его определенный репозиторий и смотрю как у него что-то реализованно.

    • @AlexCSharp
      @AlexCSharp  4 года назад +1

      @@Keeytari Я его знаю, но это был урок для школы программистов вообще.) Я не планировал канал вести, но будет видно) Думаю сюда просто разборы архитектур учеников ещё выкладывать, и занятия не по чистому языку(их как грязи) а по архитектурам, практикам в коммерческой разработке, SOLID и т.п. Но язык будет C# и технологии его же.

    • @Keeytari
      @Keeytari 4 года назад

      @@AlexCSharp Я новичок в C#, чуть больше года занимаюсь им. Мне как раз таки архитектура приложений нужна) Так как я сейчас разрабатываю прогу, сделал много функционала и все пойдет коту под хвост, так как все выглядит как какое-то дерьмо) Мне нужно научиться как раз таки делать архитектуру приложения правильно, чтобы все было удобно и понятно.) Спасибо за урок еще раз! И не забрасывайте канал, у вас хорошо получается, я думаю, что многим ваш опыт и видео будут полезны!

    • @Keeytari
      @Keeytari 4 года назад +1

      @@AlexCSharp С вами солидарен) Просто роликов по самому шарпу много, а вот по архитектурам мало, а еще меньше тех, которые рассказывают о коммерческой разработке, как все строится, как выглядит архитектура приложения и тд тп. Все что связано с коммерческой разработкой, этого всего мало) А роликов по типу: Изучаем паттерн Одиночка много)

  • @destroyergame8131
    @destroyergame8131 2 года назад +2

    топ все очень просто и понятно рассказываешь)

  • @danieln446
    @danieln446 4 года назад +1

    Спасибо! Не останавливайся!

  • @kayobjerg7057
    @kayobjerg7057 3 года назад +1

    Pure gold!! Шикарно!

  • @abtoputet777
    @abtoputet777 3 года назад +1

    Очень понятно, спасибо за труд!

  • @alexeyklochkov2275
    @alexeyklochkov2275 4 года назад +2

    Отлично, спасибо!

  • @bpht618
    @bpht618 3 года назад +1

    Отличное видео, подпишусь, вдруг автор решит продолжить)

  • @AlexCSharp
    @AlexCSharp  5 лет назад +3

    Прошу прощения за плавающий звук, буду фиксить)

    • @shkurmander
      @shkurmander 3 года назад

      А не вы писали скринкасты для SkillFactory для курса Разработчик C#, в частности по разработке проекта SocialNetwork?

    • @AlexCSharp
      @AlexCSharp  3 года назад +1

      @@shkurmander нет, мне не нравятся системы большинства школ программирования, поэтому я если что-то и делаю, то для их учеников, а не самих школ. )
      Если встретили что-то похожее -не удивительно, ведь я учу best practices, а best они не просто так, и довольно распространены. Да и первоисточники я указал в начале ролика, можете ознакомиться, найдёте параллели наверняка. ;)

  • @xilalix
    @xilalix 3 года назад +1

    Мощное видео

  • @СоломонЗуев-я2л
    @СоломонЗуев-я2л 2 года назад

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

  • @ДмитроМартинов-о8з
    @ДмитроМартинов-о8з 4 года назад +1

    Спасибо!)

  • @maksim3281
    @maksim3281 2 года назад

    Мне кажется, что у класса DriverEntity должно быть поле со списком машин, иначе как нам подгружать связанные данные? Например, информацию о водителе и его машинах? Делать несколько запросов к бд?
    Для примера возьмем такой случай: нам нужно получить водителей, чей возраст находится в диапазоне от age1 до age2 и получить информацию о их машинах (для какой-нибудь статистики).

    • @AlexCSharp
      @AlexCSharp  2 года назад +1

      Я писал не бизнес-логику, а показывал архитектурный подход. Для бестпрактис по формированию и оптимизации запросов, работе с индексами, работе оптимизаторов БД и т.п. надо было бы делать ещё одно полуторачасовое видео.

  • @Евгений-т3ъ3п
    @Евгений-т3ъ3п 4 года назад +2

    Отличный контент, Алекс, спасибо! Оставь пожалуйста свои координаты для связи, хотелось бы взять у тебя несколько уроков, в Телеге не смог найти тебя

    • @AlexCSharp
      @AlexCSharp  4 года назад

      Спасибо!
      t.me/RenMaRus может быть так выйдет

  • @orhanaliyev9774
    @orhanaliyev9774 2 года назад

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

    • @AlexCSharp
      @AlexCSharp  2 года назад

      Интерфейс в принципе лучше классов тем, что на одном классе может быть реализовано множество интерфейсов. А от класса можно лишь от одного наследоваться. В остальном ничем, и в данном случае тоже ничем.

  • @maksim3281
    @maksim3281 2 года назад

    А для чего в слое Entities нужен интерфейс IBaseEntity и абстрактный класс BaseEntity. Можно ли отказаться от интерфейса?
    Просто не до конца понятно в чем преимущество этого интерфейса, если абстрактный класс, ничего более не привносит.
    Может просто оставить абстрактный класс и всё?

    • @AlexCSharp
      @AlexCSharp  2 года назад

      Можно отказаться и от того, и от другого. Всё зависит от задачи.

  • @nikitashevyakov3057
    @nikitashevyakov3057 2 года назад

    Спасибо за лекцию! Все круто!
    Есть вопрос, надеюсь, если не ответите то хоть на толкнете на мысль. А как бы вы реализовывали структуру, если проект, а точнее сервисы разросстаются до большиъ масштабов?
    Получается, что не сильно удобно становится использовать сервисы, в плане бегать по сервису и искать нужный метод. Можно ли как-то от этого уйти?
    Заранее благодарю

    • @AlexCSharp
      @AlexCSharp  2 года назад +1

      Сервис работает с одной сущностью. Если у Вас 1000 и 1 метод для работы с одной сущностью: можно перейти на CQRS. Но тогда будет 1000 и 1 класс. А если эти методы не касаются непосредственно CRUD-функционала - их стоит вытащить в отдельные типы, в зависимости от смысла: конвертеры, мапперы, сериализаторы, дескрипторы и т.п.
      Опять же, используйте инструменты для обобщения и универсальности. Например, если надо получать одну и ту же сущность по 3м разным параметрам - не надо писать 3 разных метода, достаточно 1го метода, принимающего делегат с условием, где на более высоком уровне уже будет приниматься решение, по какому условию сущность будет получена.

    • @nikitashevyakov3057
      @nikitashevyakov3057 2 года назад

      @@AlexCSharp Спасибо за ответ! Только у меня небольшой диссонанс появился.
      Получается работать в сервисах мы можем/должны в рамках 4 методов (добавления, обновления, получения, удаления)?
      Напрашивается вывод, что для сложного приложения (с запутанной логикой) такое не подходит... В сложном приложении получение(редактирование, удаление, добавление) одной сущности может осуществляться разными способами.
      К примеру:
      1) получение данных для пользователей разного уровня доступа. Руководитель (который видит всю инфу) и рядовой сотрудник (только то что ему нужно). В каком слое нужно отсеивать "лишнее" для рядового сотрудника и "оставить" для руководителя?
      2) тоже самое хотелось бы спроецировать и на редактирование, к примеру некоторые данные рядовой сотрудник имеет право редактировать, а некоторые нет. Понятно, что можно ограничить ввод данных на UI слое, но хотелось бы услышать где правильнее это делать на стороне сервера.
      Буду признателен за ответ!

    • @AlexCSharp
      @AlexCSharp  2 года назад +2

      @@nikitashevyakov3057 Отсеивать лишнее в сервисном слое. На UI лететь должно только то, что необходимо. CRUD- это не 4 метода, это 4 типа операций. Удаление может быть разное, хардделит, софтделит, делит по условию и т.п., так же с получением данных: 1 сущность, коллекция, по такому условию, по эдакому условию, это всё CRUD.
      Но репозиторий не должно волновать, у кого там какие пермишены и т.п., максимум, это регулируется, как я выше писал, условием через делегат в качестве параметра.
      Get(Func condition).
      А про то, кто там что может редактировать - это решается на уровне UI, а если при недостаточном пермишене приходит запрос от UI на редактирование того, чего нельзя- ошибку кидать уже из контроллера. Репозиторий за такие вещи вообще не должен отвечать.

    • @nikitashevyakov3057
      @nikitashevyakov3057 2 года назад

      @@AlexCSharp Благодарю вас!

  • @kurnakovv
    @kurnakovv 3 года назад +1

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

    • @AlexCSharp
      @AlexCSharp  3 года назад

      Это инверсия зависимостей. Мы всегда используем интерфейсы, как абстракцию, дающую гибкость и конкретно задекларированный функционал, а все декораторы и сам сервис так же реализуют один и тот же интерфейс. Их явная связь организуется только в месте инициализации всего пайплайна. Если мы захотим в декораторе изменить сам сервис - нам придётся его переписывать. В случае с интерфейсом мы просто добавляем ещё одну реализацию интерфейса, не меняя сам класс.

    • @kurnakovv
      @kurnakovv 3 года назад

      @@AlexCSharp Спасибо за ответ! Вроде понятно. Еще вопросик, декораторы можно ли перегружать? Ну то есть добавить не только логику логирования, но и другой функционал или же декоратор нужен только для точной функциональности? (только логирование и больше нельзя если надо еще создавайте еще 1 декоратор)

    • @AlexCSharp
      @AlexCSharp  3 года назад

      @@kurnakovv Строится цепочка декораторов. Чем больше разнопланового кода в одном месте - тем тяжелее читать, тем тяжелее дебажить. Каждый класс должен быть сфокусирован на одной задаче, как говорит Макконнелл. Это касается не только декораторов.

    • @kurnakovv
      @kurnakovv 3 года назад

      @@AlexCSharp Ок, еще раз спасибо! Жаль что вы больше видео не выпускаете...

    • @AlexCSharp
      @AlexCSharp  3 года назад

      @@kurnakovv Много других дел. Надо работать, развиваться самому, писать методички для всё подрастающих учеников, поэтому на видео пока времени нет. Хотя хочу выпустить более крутые и проработанные видео по архитектуре, есть сценарий, но сложно все крутые штуки хорошо проработать и совместить, требует прорву времени.

  • @ИгорьКочат
    @ИгорьКочат 3 года назад +1

    Планируешь ещё пилить видео по c# ?

    • @AlexCSharp
      @AlexCSharp  3 года назад

      Давно планирую, но всё никак не запилю. А скоро ещё начнут запрещать образовательную деятельность без аккредитации и всё, приплыли. )

    • @ИгорьКочат
      @ИгорьКочат 3 года назад

      @@AlexCSharp Сейчас не так много толковой информации по шарпам на ютубе. Будет очень круто, если продолжишь это дело

    • @AlexCSharp
      @AlexCSharp  3 года назад

      @@ИгорьКочат по шарпам-то как раз предостаточно. А вот по архитектуре и кодстайлу мало. И я не столько шарпы даю(это просто язык, на котором я работаю), сколько общие принципы построения систем. Они подойдут для любого ООП-языка.

    • @ИгорьКочат
      @ИгорьКочат 3 года назад

      @@AlexCSharp Можно у тебя взять урок по архитектуре ?

    • @AlexCSharp
      @AlexCSharp  3 года назад

      @@ИгорьКочат Конечно, под видео моя тг.

  • @ВладиславШумейко-ф3з

    без dependency injection?

    • @AlexCSharp
      @AlexCSharp  3 года назад +1

      В смысле без IoC? это не относится к архитектуре, каждый сам решает, как именно управлять созданием объектов и их циклом жизни.

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

    +++++

  • @husentochiev5067
    @husentochiev5067 3 года назад

    Слишком много повторяющегося кода. Меня это немного напрягает :)

    • @AlexCSharp
      @AlexCSharp  3 года назад +1

      Таковы правила игры. Претензии к создателям слоистых архитектур. Главное, при устройстве на работу никому этого не говори.

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

    а где ApplicationContext???

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

      Чтобы что? Это на откуп тех, кто пишет приложение. Я описывал бизнес-составляющую.

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

      @@AlexCSharp понял