• Какой вариант компонента объективно лучше?

    @UnformedVoid
    Разработчик ПО
    Аргументы вашего тимлида непрофессиональны и не подкреплены рациональной аргументацией. Ваш подход поддерживает компонентную структуру приложения. В то время как то, что предложил ваш тимлид обязывает слишком много помнить о том, как нужно писать код, увеличивает количество повторяющегося кода, в целом делает его более императивным, что плохо совместимо с идеями стоящими за Vue. В общем советую вам настоять на своём и описать почему ваш подход лучше. «я всегда так делал, мы так привыкли» — не аргумент. Ваш тимлид явно не видит абстрактную сторону и плохо понимает работу фреймворка, а может и как вы говорите, не очень-то и профессионален.

    UPD.
    Я исследовал комментарии тут, подумал и пришёл к дополнительным выводам, которые опишу тут:

    1) Ваш подход имеет минус — он избыточен, так как содержит два слота, что делает логику неясной. Дело в том, что у вас не понятно к чему относится второй слот content. Читающий может подумать, что это контент, который выводит сам аккордеон — один раз, а не для каждого элемента. Мне такая логика особо знакома из фрейморвка WPF. Там всё так и работает, но судя по вашему примеру этот слот относится к слоту item, то есть используется не для аккордеона, а для его элементов, что неправильно, так как нарушает инкапсуляцию. Это минус вашего подхода, но он легко исправляется.

    2) Минусы подхода вашего тимлида остаются теми же — многословность, императивность. Он нарушает принцип DRY.

    Так вот, требуется подход, который не будет нарушать лучших практик — гибридный подход. Для начала нужно разделить понятия аккордеона и элемента аккордеона — теперь это два слабосвязанных компонента. У нас должна быть возможность менять компонент элемент аккордеона на новый, при этом не трогая сам аккордеон. Это решается очень просто. Мы просто берём ваш подход и оставляем в нём только один слот item. Этот слот будет позволять пользователю аккордеона создавать разметку по своему усмотрению. Слот content убираем за ненадобностью. В дальнейшем мы можем аккордеону добавлять ещё слоты и они будут менять его структуру, например добавлять ему заголовок или что-то ещё, но при этом никак не трогая то, как отображается внутренность его элементов (помним об инкапсуляции)! Этим должен заниматься слот items. Теперь, у нас есть возможность создать разметку его элементов. Мы можем это сделать с помощью простых HTML тегов, если у нас аккордеон в одном месте и забыть о дальнейшем (помним о принципах YAGNI и KISS). Если же у нас аккордеон в нескольких местах, причём, разметка его элементов каждый раз одинаковая, то стоит задуматься о компоненте элемента аккордеона. Его структура не важна, так что ударяться в детали я не буду. Далее мы просто создаём ещё один компонент, который будет оборачивать наш аккордеон и подставлять в его слот item соответствующий компонент элемента аккордеона (и, возможно, добавлять ещё какую-то функциональность, разметку) — типа создаём подкласс. Таким образом мы не пишем v-for каждый раз, то есть не повторяемся (помним о DRY), и имеем полный контроль над тем, что происходит в приложении. Если понадобится что-то поменять у всех, мы просто зайдём и поменяем это в нашем последнем компоненте-обёртке. Если нужно будет реализовать что-то новое, то мы создадим новую обёртку или вовсе используем наш базовый аккордеон на нужной странице (помним о YAGNI). Некоторым может показаться это избыточным. Так и есть, этим надо пользоваться с умом. Если у вас один аккордеон на всё приложение, то и думать о переиспользовании — бессмысленно. Если же компонент требуется в нескольких местах, то приведённый мною подход прекрасно подойдёт, так как основан на лучших практиках взятых из ООП.

    P.S. С подходом-обёрткой мы можем даже не писать отдельные компоненты для элементов аккордеона, так как, в принципе, нам не нужны элементы аккордеона отдельно от него. Достаточно лишь создать аккордеон-потомок с нужной разметкой в слоте item.
    Ответ написан
    2 комментария
  • Чтобы заниматься blockchain важнее знание физики или информатики?

    Учите оптику. Она поможет при чтении документации.
    Ответ написан
    Комментировать
  • Зачем нужно ООП?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    Раньше программа могла быть написана одним сплошным листингом. Но при попытке сделать изменения, оказалось что очень сложно понять все зависимости внутри программы, как только ее размер превышает некоторый критический уровень.
    Появилась мода на модульность.
    Но программы стали сложнее, и уже модуль перестал помещаться в мозг одного человека, чтобы можно было его быстро править.
    В процессе различных подходов, был придуман ООП-подход, суть которого заключается в следующем:

    Раз все программы оперируют некоторыми данными, то нужно взять эти данные, взять функции (методы), которые работают с этими данными и поместить в один объект.
    Если нужно будет изменить тип данных, добавить/отнять/поделить функционал, то программист будет работать с одним этим объектом. При этом, если разные объекты запрашивают что-либо друг у друга, то в ООП довольно легко сделать версионность и обратную совместимость.

    Ну а все остальное (наследование, полиморфизм и так далее) это уже возникло как следствие того, что ООП не решает все проблемы. Другой, более удобной глобальной парадигмы для сложных программ пока нет, вот ООП и занял свою нишу.

    Программы поменьше, особенно те, которые могут быть написаны одним человеком, могут писаться как угодно, но чем больше программа, тем сложнее ее поддерживать, а ООП - один из самых доступных методов "поделить" программу на независимые инкапсулированные кусочки.
    Ответ написан
    Комментировать
  • Зачем нужно ООП?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Прочитайте "Чистый код" Роберта Мартина, там это доходчиво объясняется. Все существующие парадигмы программирования, паттерны проектирования и архитектурные принципы существуют ровно с одной целью - снизить сложность сопровождения и развития большой кодовой базы.
    Ответ написан
    Комментировать
  • Как начать зарабатывать в 14 лет?

    opium
    @opium
    Просто люблю качественно работать
    Какая нахрен ответственность если вы нихрена не делали?
    Попробуйте что то сделать деньги рекой потекут и ответственность тоже, хоть узнаете что это такое
    Ответ написан
    Комментировать
  • Какие книги по программированию must-have?

    delphinpro
    @delphinpro
    frontend developer
    Не буду оригинален, эти книги у всех на слуху (и у меня на полке =).

    Макконнелл: Совершенный код
    Кнут: Искусство программирования
    Роберт Мартин: Чистый код. Создание, анализ и рефакторинг
    Гамма, Влисидес, Хелм, Джонсон (также известные как "Банда четырех"): Приемы объектно-ориентированного проектирования. Паттерны
    Фаулер: Рефакторинг. Улучшение существующего кода
    Ответ написан
    1 комментарий
  • Видеоуроки - долго, и много воды. Стоит ли тратить на них время?

    Zoominger
    @Zoominger Куратор тега IT-образование
    System Integrator
    Нет, не стоит.
    Вы тупо будете слушать, как картавый мычащий Васян пересказывает какой-нибудь learnjavascript, пропуская половину тем, которые сам не понимает.
    И таких видео - 90%.
    Ответ написан
    12 комментариев
  • Как освободить место в Docker под Windows?

    @vitaly_il1
    DevOps Consulting
    Похоже это старая проблема - https://github.com/docker/for-win/issues/244.
    Возникает она из-за того, что контейнеры запускаются не под виндоус, а под линуксовской виртуалкой. И как уменьшить ее диск непросто.
    Попробуйте optimize-vhd
    Ответ написан
    1 комментарий
  • JavaScript неправильно вычитает числа 8.18 - 1.99. В чем дело?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. Никогда не вычитайте из суммы: всегда пересчитываете сумму из набора услуг (TOTAL=k1x1+k2x2+...+kNxN)!
    2. Точность вычислений: floatNum.toPrecision()
    3. Точность допуска (расстояние, погрешность) - проверяйте так:
    if (Math.Abs(x1 - x2) < delta) { ... }.
    Ответ написан
    1 комментарий
  • JavaScript неправильно вычитает числа 8.18 - 1.99. В чем дело?

    lamer350
    @lamer350
    กำลังสูงสุด
    Простите конечно, тут просто не знаю даже если возможность шутить... Но вы примерно 6 999 9999 999й человек который это заметил. Вы хоть одну книжку по JS видели?
    Ответ написан
    7 комментариев
  • Как сделать динамический ключ объекта по значениям другого объекта?

    @StockholmSyndrome
    interface Types {
      TYPE: 'type';
      ANOTHER_TYPE: 'anotherType';
    }
    
    type SomeType = {
      [P in Types[keyof Types]]: () => void;
    };
    
    const object: SomeType = {
      type: () => {}, 
      anotherType: () => {}
    }
    Ответ написан
    Комментировать
  • Почему Typescript-компилятор не обрабатывает .vue файлы?


    Это возможно? Если да, то каким образом?

    Нет.

    tsc это компилятор TypeScript-а. Почему компилятор TypeScript-а должен компилировать *.vue?
    Если нужно включить компиляцию используйте vue-loader.


    Visual Studio Code + Vetur немедленно подчеркивают красным ошибки

    Поскольку Vetur это тот же vue-loader тольков внутри Visual Studio Code и я не удивлюсь что он использует vue-loader у себя внутри.
    Ответ написан
    Комментировать
  • Как типизировать содержимое $options?

    @grinat
    Хз как ты туда что-то записываешь, как бэ эти options readonly https://github.com/vuejs/vue/blob/731e4d0ebc997a6c...
    Тут пример как добавить
    https://github.com/vuejs/vuex/blob/65dbfec40d5fe7a...
    Ответ написан
    1 комментарий
  • Как бороться со стрессом на работе?

    Zoominger
    @Zoominger
    System Integrator
    Лол, добро пожаловать в веб-программирование. Оно немного не такое радужное и весёлое, как рисуют в статечках на Хаброчке и комиксах от XKCD, да?

    Мой совет - меняйте сферу и/или место работы. Начните со второго, очевидно, это какая-то веб-студия с бесконечным потоком.

    Нет, серьёзно, смените место.
    Ответ написан
    2 комментария
  • Почему puppeteer пишет, что node detached?

    @Interface
    Сама нода 100% есть, потому что если просто получать ее textContent, это работает.

    Это ошибочный вывод. textContent вполне работает с "виртуальной" нодой:
    const node = document.createElement('div');
    node.textContent = 'hello';
    console.log(node.textContent)
    Ответ написан
    Комментировать
  • Как заставить tsc использовать типы проверяемых пакетов вместо типов места его вызова?

    В самом Vault библиотека dayjs и тип Dayjs нигде не используются!

    А что вы понимаете под использованием? Очевидно, для исполнения вам нужен dayjs, и он должен ставиться как рантайм-зависимость Utils. Чтобы избавиться от такой зависимости, вам тогда нужно положить dayjs внутрь Utils тем или иным способом, например собрать Utils тем же роллапом в бандл. Я правда не вижу в этом необходимости - бандлятся обычно только конечные приложения, а то что есть транзитивные зависимости у библиотеки -

    Другое дело если вы видите проблему в том что требуется информация о ТИПА Dayjs. Тогда уточните, как во что вы компилируете Utils и не протекат ли Dayjs через публичный интерфейс Utils.
    Ответ написан
    2 комментария
  • Можно ли обойтись без кастования типов при присваивании строки переменной с литеральным типом?

    Xuxicheta
    @Xuxicheta
    инженер
    попробуй так. мож прокатит
    /**
     * @template {string} T
     * @param {T} encryptOptions
     */
    function somefunction(encryptOptions)


    это равнозначно в ts
    function somefunction<T extends string>(encryptOptions: T)

    правда если ты передаешь объект, нужно будет сделать отдельный тип с дженериком чисто для этой функции.
    Ответ написан
    2 комментария
  • Почему Typescript-линтер не видит типы в global.d.ts?

    Robur
    @Robur
    Знаю больше чем это необходимо
    tsc это не линтер а компилятор
    globals.d.ts должен быть тем или иным образом подключен к проекту. в tsconfig.json или ///
    вы это сделали?
    для простоты проверки добавьте /// в какой-нибудь файл с ошибкой
    Ответ написан
    1 комментарий
  • Какую выбрать сферу в IT с нуля когда тебе "под 40"?

    php666
    @php666
    PHP-макака
    никакую

    мне 37, твой ровесник, карьера и менеджмент никогда не интересовали - остался в роли исполнителя.
    был бы я руководителем или просто ответственным за проект - я бы не рассматривал на должность человека 37 лет без опыта. даже на джуниор позицию.
    ибо твой возраст и метание лишь показатель, что ты сам не знаешь что хочешь от жизни и профессионалом так и не стал ни в какой сфере.
    в чем твое преимущество будет перед человеком 29-30 лет с таким же набором знаний? минусы как таковые - в возрасте, плюсов - нет.
    когда ты дорастешь хотя бы в вебе, где, как ты говоришь, "низкий порог входа" (а это совсем не так), тебе будет 40 лет.
    возраст, когда другие люди уже сворачивают горы, ты будешь сидеть веб-макакой с коллективом двадцатилетних юношей и понимать всю свою ущербность, а они будут смотреть на тебя как на престарелого психопата.

    Напомню что хочется через год хотя бы 20-30к дохода в месяц иметь.
    в Москве за 20 000 в месяц даже таджики не работают. Устройся в такси или грузоперевозки и не ломай себе голову этой ерундой, нужны бесконечные годы на обучение в IT и нужно "постоянно бежать, что бы идти". Оно тебе надо?
    Ответ написан
    11 комментариев