• Как установить мидлварину для всех роутов кроме указанного?

    @kuftachev
    Можно в ней самой проверить роут и ничего не делать, а по остальным делать.

    Я не уверен, но мне кажется, что можно установить на группу начиная с какого-то суброута.
    Ответ написан
    Комментировать
  • Как управлять авторизацией с единой точкой входа?

    @kuftachev
    Можно написать middleware которая:

    • если на auth без куки - next()
    • если на auth с куки - 200, можно ещё куке обновить срок годности
    • если другой роут без куки - 401
    • если другой роут с куки - next()


    Можно не куку, а токен проверять и что ещё нужно.

    Второй вариант, можно использовать разные middleware для разных роутов.
    Ответ написан
  • Когда не использовать vuex | redux | flux?

    @kuftachev
    Компонент загружает данные с сервера, которые ему нужны, потом он с ними работает и из стирает сборщик мусора.

    Хранилища нужны для отслеживания общего состояния приложения (или модуля), то есть, если это обычный CRUD, то далеко не факт, что есть смысл этим данные хранить в общем состоянии.

    И не нужно путать с кешированием, так как это разные задачи.
    Ответ написан
  • Где искать Middle/Senior backend Node.js разработчиков?

    @kuftachev
    1. В заголовке Middle/Senior, а в вопросе про сильных... Не каждого синьора можно назвать сильным, или там нужно, чтобы они в свободное время ещё погрузкой/разгрузкой занимались.

    2. Если бы речь шла про того, кому реально нужно решить ситуацию, то есть много вариантов, что делать если на рынке нет нужных программистов, но если речь идёт о HR, то тут ничего не поможет.

    3. Если бы изначально озвучили условия, может кто-то и из тех, кто сюда заходит, задумался бы и связался.
    Ответ написан
    3 комментария
  • Насколько удобен линукс для верстальщика?

    @kuftachev
    В Вашем условии нерешаемая проблема - это Photoshop. Но сейчас многие делают дизайн в Figma.

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

    То, что тут написали против Linux, или пробовали его лет 5-10 назад, или просто от кого-то слышали.
    Ответ написан
    7 комментариев
  • Фреймворк для однотипных лендингов?

    @kuftachev
    Конечно все зависит от того, как могут дальше развиваться требования, но если отличия будут не совсем большие, и не нужно динамически из админки менять текст по настроению, то я бы использовал что-то типа Pug, в смысле шаблонизатор HTML.

    Там есть и переменные, и условия, и include, по-моему, наследование шаблонов, и даже возможность выполнить простой JS. А потом все просто превращается в один HTML на каждую страницу. При чем, сразу минифицированный.

    Но если есть необходимость в админке, то брал бы Yii2, чтобы потом не париться, что чего-то не хватает.
    Ответ написан
    Комментировать
  • Существует ли "чистая" установка Yii2?

    @kuftachev
    Вот про разницу.

    https://github.com/yiisoft/yii2-app-advanced/blob/...

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

    P.S. Присоединяюсь к совету учить его уже не актуально на данный момент, кроме случаев, когда знаешь другой, но предлагают хорошую работу на нём. Выбирайте между Laravel и Symfony, хоть они и оба ужасны.
    Ответ написан
  • Node.js умеет рендерить страницы сайтов как браузер?

    @kuftachev
    Node.js не имеет встроенного Web API, поэтому не даёт никаких преимуществ перед любым другим языком.... К сожалению.

    Проблема в том, что редкая библиотека на столько актуально и корректно работает с HTML, особенно с невалидным.
    Ответ написан
    Комментировать
  • В каких случаях уместно использование react?

    @kuftachev
    React стоит использовать тогда, когда именно за это платят, а так есть куда более приятные вещи .

    А вообще, с Вашей формулировкой вопроса, нужно просто пока верстать. Не в плохом смысле, просто слишком большой разрыв между этими двумя понятиями.
    Ответ написан
    Комментировать
  • Где взять готовый лэндинг-шаблон для Vuetify?

    @kuftachev
    К лендингу на Vuetify нужно не забыть ещё развернуть кластер на Java в качестве бекенда!

    Смысл использовать для лендинга технологию, которая даже индексируется достаточно условно?

    Для лендинга реально нужен HTML + CSS и совсем немного JavaScript.
    Ответ написан
  • Как грамотно использовать компзицию вместо наследования?

    @kuftachev
    Что-то Вы вообще не о том.

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

    Недостаток первого варианта в том, что тяжело вносить изменения в будущем, особенно, если мы не контролирует все реализации нашего класса. Если мы хотим добавить метод или поле в базовый класс, то оно может конфликтовать с именем в классе наследнике и может все поломать. При композиции, естественно, такой проблемы нету.

    Поэтому, рекомендуется использовать композицию, вместо наследования.

    Ваш пример с React - это вообще не то. Даже тяжело представить как и зачем туда запихнуть наследование.
    Ответ написан
    Комментировать
  • Webstorm vs VS Code 2019?

    @kuftachev
    Это как условное Renault и BMW, вроде бы и то, и то машина, но во втором ты садишься и все на своем месте, это совсем другое ощущение.

    Вот разница где-то такая, хотя ехать и на VS code можно.

    А вот как вспомогательный редактор, VS code божественный!
    Ответ написан
    Комментировать
  • Как понять, нужен Vuex или нет?

    @kuftachev
    Вы все правильно поняли!

    State хранит / уведомляет об изменениях в общем состоянии приложения. Туда не нужно пихать то, что должно храниться в компоненте или группе компонентов.

    В вашем примере, страница блога - это компонент который хранит статьи, и передаёт данные для отображения в компонент статья.

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

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

    Или от роли пользователя пропадает или появляется часть путей на сайте.

    В общем, верной дорогой идете товарищ!
    Ответ написан
    Комментировать
  • Можно ли переменной, ссылающейся на массив, присвоить метод slice того же массива? Тут не будет ошибки и старый массив продолжит существование?

    @kuftachev
    Самый простой способ узнать это, просто проверить, если есть сомнения.

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

    Типа map(), forEach(), filter(), reduce().

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

    Ещё почитайте о порядке вычисления выражений, в данном случае, очевидно, что сначала вычислиться функция, потом ее значение провалится тому, что справа.
    Ответ написан
    7 комментариев
  • Как правильно использовать сервисы и репозитории в web приложении?

    @kuftachev
    Yii2 и Laravel используют Active Record вместо Entity и Repository, то есть описание данных и доступ к ним.

    Service - это слой в котором у Java выполняется бизнес-логика, хотя у .Net часто прямо в моделях. (Первое называют анемичными моделями, кто-то рассматривает это как правильную архитектуру, кто-то как антипаттерн).

    Это я к тому, что в архитектуре больше философии, чем инженерии.

    В общем, не заморачивайтесь. Если у Вас просто CRUD, то нет смысла плодить кучу абстракций и нужно использовать Active Record и запросы через него в контроллере.

    Если запросы сложнее и это уже связано с доменной областью, то пишем в Active Query у Yii2 и методы под каждую ситуацию, чтобы при замене логики не искать по всему коду. Но это а том случае, если именно приложение, а не конкретного action.

    Если какая-то простая логика, типа сложить два числа, то можно прямо в самом Active Record, если уже что-то сложнее, то выноситься в уровень Service про который Вы и спрашивали. Тогда он будет запрашивать у Active Record, а Controller будет работать с Service.

    Repository даёт абстракцию над хранилищем, но я бы не использовал его с Yii2. Тоже очень неоднозначная штука, то что в Java почему-то называют Repository, на самом деле является просто DAO, при этом в .Net используют настоящие Repository.

    Главное правило, если кода много и начинаете в нем теряться, нужно думать о том, как его разделить. Остальное с опытом!
    Ответ написан
    Комментировать
  • Взгляните на тестовое?

    @kuftachev
    1. Первое что открыл:
















    Ну тут явно напрашивается какой-то цыкл.

    2. Так конечно технически можно...

    {
    currencyList.map((currencyItem, index) => (

    checkedCurrency(currencyItem)}
    >{currencyItem}


    ))
    }

    Но лучше не писать логику, тот же map в части return. Обычно это выносится в переменную выше, можно в самом методе render, в зависимости от ситуации, а потом уже только поставляется сама переменная в разметку.

    3. В глаза бросается

    export { default } from './Ticket';

    Во-первых, не нужно создавать лишний файл, сама директория уже служит именем компонента, поэтому уже index.js и есть тот самый файл.

    Во-вторых, это ещё больше минус, так как создаёт впечатление, что Вы не понимаете как работает import/export.

    Если используется default, то не нужно использовать деструктивное присвоение. Нужно просто писать:

    export mySuperTicket from './Ticket';

    Конечно имя нормальное писать нужно, это в том смысле, что можно любое.

    4. Есть ещё моменты, но тут вопрос на какую позицию Вы претендуете. Если джуниор без реального опыта, то не сильно критично как Вы организовываете файлы и папки, так как на работе скажут как нужно, это уже для человека со стажем был бы вопрос, что за фигня.
    Ответ написан
  • Yii2 как убрать дублирование записей в $dataProvider при joinWith()?

    @kuftachev
    Когда я мучался с этой проблемой, я решил посмотреть как это делают профессионалы... Посмотрел код сайта yiiframework.com, раздел новости или что-то подобное, там теги к новостям многие ко многим... В итоге... НИКАК! У них тоже все неправильно отображается.

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

    @kuftachev
    Отличие толстого клиента от всяких хлюпиков в том, что у толстого есть целое состояние, которое он бережно хранит. Как только Вы понимаете это, ответ становится очевидным.

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

    С учётом сохранения состояния, дальше можно само представление организовать как угодно, или рендерить разные элементы на одном урле, или сделать роутинг/суброутинг.

    P.S. Если пример с городами реальный, то можно вообще взять API карт от Google или Yandex, клиент вводит город и адрес, ему показывается точка на карте, дальше под этой точке получаются полные данные о месте с кучей дополнительной информации, потом может пригодится, хотя и сами данные почтовые сохраняем, которые нужно. В таком случае вообще не нужно будет пользоваться возможностями SPA.
    Ответ написан
    Комментировать
  • Как реализовать личную переписку на сайте по типу диалогов в ВК?

    @kuftachev
    Все зависит от бизнес задачи.

    Если критично не использовать новую технологию, так как это лишние расходы на администрирование, можно просто на клиенте по таймингу опрашивать.

    Или есть виджеты на основе Telegram, можно из какого связать между собой.

    В общем, можно сделать много чего, если для учебы, то можно как и Node.js покапать, так и асинхронный PHP, или вообще Go.
    Ответ написан
    Комментировать
  • Как отправить уникальный id заявки?

    @kuftachev
    Файл - это тоже хранилище, не вижу проблем что-то хранить в файле.

    Но нужно понимать "за* и "против". Если эта операция происходит раз в день, то можно придумать тысячу решений с файлами, но если нет, то с файлом не получится конкурентный доступ и все запросы будут выполняться по очереди, что вообще не правильно для веба... но допустимо для двух систем, которые обмениваються информацией раз в день.

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

    P.S. Я не вчитывался, но мне кажется, что много кода как для отправки писем. Может лучше какую-то библиотеку использовать?
    Ответ написан
    Комментировать