Контакты

Наибольший вклад в теги

Все теги (27)

Лучшие ответы пользователя

Все ответы (12)
  • Что такое Redux простыми словами?

    jQuery "видит" весь DOM целиком. И манипулирует DOM-ом, доступ к которому предоставляет браузер. Но можно и по-другому.

    Давайте рассмотрим такую архитектуру, в которой все компоненты связаны между собой древовидно. То есть, отдельно взятый компонент может общаться со своими дочерними и со своим родительским. Если нужно, чтобы между собой пообщались два компонента в разных ветках, то в конце концов их общение происходит через общего предка. Такой подход вполне согласуется с древовидной структурой HTML.

    Затем отделим состояние от поведения и представления. Состояние можно описать статической структурой данных, JSON-ом, например. А поведение - это чистая функция, из предыдущего состояния и некоего события (действия) делающая следующее состояние. Представление же "знает", как визуализировать состояние. Можно этот принцип воспроизвести от самых мелких компонент (не имеющих потомков) в нашем дереве и до корня. Тогда весь жизненный цикл приложения можно изобразить как цепочку состояний от некоего начального и до текущего, ведомую событиями (действиями).

    Для того, чтобы это всё отобразить, не обязательно в ходе вычисления следующего состояния (или представления) сразу манипулировать DOM-ом. Можно построить из состояния и его представления фрагмент DOM-а, каким он должен получиться. А потом вычислить diff между этим построенным фрагментом (виртуальным DOM-ом) и реальным браузерным. И этот diff применить к реальному DOMу. Один раз. Получится быстро.

    Насколько мне известно (поправьте, если это не так), Redux заимствован из Elm-а. Elm - это экосистема и функциональный язык, компилируемый в JS, сделанный для того, чтобы фронтэнд можно было разрабатывать удобно, быстро и без runtime-ошибок. По синтаксису - это адаптация Haskell-a. Ключевым элементом Elm-а является как раз вот эта самая архитектура. Советую подробнее почитать в первоисточнике. https://guide.elm-lang.org/architecture/

    Кроме упомянутых особенностей эта архитектура также позволяет выполнять так называемую time-travelling отладку. Поскольку каждое состояние и каждое событие по пути от исходного до текущего можно залогировать и воспроизвести (ведь функция, вычисляющая следующее состояние у нас чистая).

    С точки зрения функционального программирования, при таком подходе текущее состояние является результатом функции leftFold, применённой к исходному состоянию, последовательности событий (действий), приводящих к текущему и функции, умеющей вычислять следующее состояние.
    Ответ написан
  • Как отслеживать состояние внутри Docker контейнера?

    Вам следует создавать Docker-контейнер таким образом, чтобы в нём работал один ключевой процесс (у которого будет PID 0), завершение которого означает завершение работы контейнера. Код выхода этого процесса будет кодом выхода контейнера. Вы сможете увидеть его в выводе `docker ps --all`. Подробнее здесь: each-container-should-have-only-one-concern. Это не означает, что в контейнере должен быть всего один процесс, но должен быть один такой процесс, жизненный цикл которого неразрывно связан с жизненным циклом контейнера.

    Логи этот процесс должен писать в STDOUT и STDERR - тогда Вы их сможете увидеть с помощью `docker logs ` и перенаправить куда надо с помощью драйвера логирования, настроенного в Докер-демоне. Подробнее здесь: View a container's logs
    Ответ написан
  • Как быстро освоить angular?

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

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

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

    Другого пути нет. Сами фреймворки (и Ангуляр - далеко не самый простой из них) дают общий набор соглашений, причём далеко не полный, и вокабуляр. Однако без архитектуры приложение не оживёт, и вот это-то и есть самое сложное.
    Ответ написан
  • XSD синтаксис, можно ли реализовать конструкцию if else?

    Есть группы подстановки. То есть, можно сказать, что валидным является либо такое содержимое, либо этакое. Вот, по-моему, неплохой пример использования групп: stackoverflow.com/questions/39868769/xsd-element-s...

    Но Вы уверены, что стоит для этой задачи использовать XSD? Это же должно быть средством формальной валидации. То есть, если Ваш компонент получил на вход валидный XSD - значит, он умеет такой документ распарсить. А уже тогда можно проводить бизнес-валидацию, проверять инварианты и т.д.
    Ответ написан
  • Что нужно знать перед изучением angular и react?

    Про Реакт не скажу, но в Ангуляре (если мы о 2-м - 4-м) очень важной зависимостью является RxJS. Это сама по себе очень полезная вещь.
    Более того, я бы посоветовал вместо Ангуляра и Реакта посмотреть на замечательный фреймворк CycleJS, который построен на идее RxJS. У него очень простая, чистая и мощная архитектура. Если её освоить - многое увидится в новом безоблачном свете. Главный минус CycleJS в отсутствии готовых комплектов вроде Material для Ангуляра. Это скорее инструмент, чем готовое решение. Но в обучении это лишь плюс - больше простора для практики.

    Кроме того, полезно освоить концепцию функционального программирования, насколько это возможно в JS. Идею иммутабельных (персистентных) структур данных. Основные функции высшего порядка (вроде map, flatMap, foldLeft/reduce и др). Функциональную композицию и point-free (tacit) стиль. Очень рекомендую посмотреть на библиотеку Ramda. Всё это не является обязательным пререквизитом для Ангуляра и Реакта, но может существенно повлиять на то, как Вы пишете код.

    CycleJS и Ramda - точно помогут в более углублённом изучении JS.
    Angular очень хорошо учить по книге ng-book 2.
    Ответ написан