💻 GRASP: Декомпозиция класса Application из библиотеки impress технологического стека Metarhia

Поделиться
HTML-код
  • Опубликовано: 2 окт 2024
  • Плейлист: • GRASP
    Автор: github.com/tsh...
    Примеры кода: github.com/How...
    Патреон: / tshemsedinov

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

  • @masterguyver84
    @masterguyver84 3 года назад +5

    Как хочется, мне вернутся к этому делу. Ничего после защиты диссертации займусь.

  • @OleksandrKucherenko
    @OleksandrKucherenko 3 года назад +12

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

    • @TimurShemsedinov
      @TimurShemsedinov  3 года назад +2

      Если возникает желанин разделить пустой строкой, в 90% случаев код нужно разделить на несколько функций или методов. Оптимальный размер функции - 7-14 строк. Многие классики даже утверждают, что 5-7 строк.

    • @OleksandrKucherenko
      @OleksandrKucherenko 3 года назад +3

      ​@@TimurShemsedinov обычно метод можно разделить на три логических части: 1) проверка входных аргументов; 2) выполнение логики; 3) подготовка\упаковка результата работы... в зависимости от ситуации каждая из частей может быть упущена/упрощена/скипнута. Когда все пишется сплошным блоком, то визуально разделять эти части трудно, надо вчитываться в каждую строчку. Выделение блока кода пустой строкой является "якорем" для глаз в момент просмотра кода.
      I like to think of whitespaces the same way as paragraphing. You group together lines that contribute to one idea.

    • @TimurShemsedinov
      @TimurShemsedinov  3 года назад +2

      @@OleksandrKucherenko Нет, вы путаете API эндпоинты, функции и методы классов. Все API эндпоинты имеют подобные три шага, некоторые функции могут иметь такие шаги (а могут и не иметь, лучше, чтоб не имели), а вот методы класса максимально нежелательно, чтобы имели такие шаги. И вот почему: смысл методов класса - в том, чтобы они были связаны с контекстом (с инстансом объекта) и данные должны быть в нем так подготовлены, чтобы исключить лишние преобразования. Другими словами, если это метод класса, то лучше разделить подготовку данных в конструкторе или фабрике, обоаботку - в методах, а подготовка результатов - вообще редко может присутствовать. Резальтат - это мутация стостояния объекта или его сериализация, кроме тех случаев, когда класс реализовывает абстракцию GRASP:Controller

  • @TimurShemsedinov
    @TimurShemsedinov  3 года назад +17

    Ссылки на код из видео ниже

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

      application.js из impress: github.com/metarhia/impress/blob/master/lib/application.js

    • @TimurShemsedinov
      @TimurShemsedinov  3 года назад +5

      procerude.js из impress: github.com/metarhia/impress/blob/master/lib/procedure.js

    • @TimurShemsedinov
      @TimurShemsedinov  3 года назад +5

      cache.js из impress: github.com/metarhia/impress/blob/master/lib/cache.js

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

      resources.js из impress: github.com/metarhia/impress/blob/master/lib/resources.js

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

      modules.js из impress: github.com/metarhia/impress/blob/master/lib/modules.js

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

    Супер контекст. Много полезной иформации. Спасибо большое

  • @subwayserfers9930
    @subwayserfers9930 3 года назад +2

    Меня тоже Тимур зовут, а фамилия Шамсутдинов🙂

  • @Михайло-р9р
    @Михайло-р9р 3 года назад +2

    Здравствуйте ! Заинтересовал Ваш проект - github.com/metarhia/metawatch , есть ли документация по нему как использовать и как установить? Хочу законтрибютить фичи в Ваш проект , не подскажите каких фич не хватает проекту на Ваш взгляд ?

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

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

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

    Здравствуйте Тимур!
    Спасибо за ваши матриалы, очень полезно.
    Подскажите пожалуйста, а почему апи запросы были в файле апп, а не скажем в отдельном сервис-модуле?
    Это для налядности, или же на практике есть применение такой архетектуре,
    Извинте, если мой вопрос показался глупым, я просто учусь. =)

  • @NeoJohnSmit
    @NeoJohnSmit 3 года назад +3

    МаШаАллах1 Тимур лев

  • @antonparhom1251
    @antonparhom1251 3 года назад +2

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

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

      Смотря какое направление в программировании, уточните

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

      @@TimurShemsedinov а есть разделы которые будет полезно знать не зависимо от направления программирования?

    • @TimurShemsedinov
      @TimurShemsedinov  3 года назад +3

      @@antonparhom1251 нет, где-то теория автоматов нужна, где-то топология, где-то теория массового обслуживания и теория вероятностей, где-то дискретка, а где-то и исчисление бесконечно малых, но обычно программисты ничего этого не знают и кодят себе как дикари, не думая ни о чем

  • @donBerezza
    @donBerezza 3 года назад +2

    Добрый день, не планируете ли вы выпустить курс по алгоритмам и структурам данных?

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

      Есть несколько лекций, но полного курса я пока не буду делать. github.com/HowProgrammingWorks/Index/blob/master/Courses/AlgAndData.md
      Это материалы, по которым можно найти много книг, докладов, статей, лекций, уроков. А есть темы, по которым сложно что-то найти. Вот я по ним в первую очередь делаю лекции.

  • @ДанилЧуриков-р1о
    @ДанилЧуриков-р1о 3 года назад

    Какой фреймворк используешь для unit тестов?

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

    А что Вы за файловый менеджер используете?)

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

    здравствуй, я хотел передать state в другую функцию однако не имею понятие как, можешь объяснить пожалуйста?

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

      Я не понял вопрос. Можно подробнее или другими словами?

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

      @@TimurShemsedinov у меня есть функция и в ней есть useState и ее нужно передать в другую функцию

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

      @@serikabsadykov9260 что за useState? Лучше кусок кода дайте