Как стать автором
Обновить

Комментарии 135

Посмотрел пример, прям причин для негодования пока не вижу. Смотрим дальше. Тем более если старый синтаксис будет поддерживаться.
Добавлю. Особого преимущества от нового синтаксиса также не увидел. Да, появилась формальная возможность группировать данные, у меня такой острой необходимости не возникало, поэтому возможно я и не до конца понял суть нововведений.
Поддержка typescript дорогого стоит, у меня есть приложение на электроне и теперь с таким синтаксисом я могу легко внедрить typescript и не отстрелить себе ногу
Этот API приносит мало пользы, но много путаницы, теперь все новички должны будут понять не только стандартный и компонентный (.vue) синтакс и все различия между ними, но и этот новый группированный синтакс, который к тому же можно будет писать 2-мя различными способами (как указано в примере), что усложнит изучение.

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

В чем вообще преимущество группировки? На мой взгляд, как раз, разделение на типы (data, methods, computed) более наглядный и структурированный способ разработки.
Этот API приносит мало пользы, но много путаницы

Статья же как раз показывает обратное, с примерами.


Все примеры теперь могут быть написаны 4-мя различными способами

Какими способами? В статье есть только два варианта: 2.х и предложенный 3.х. Откуда 4 способа берутся?


В чем вообще преимущество группировки? На мой взгляд, как раз, разделение на типы (data, methods, computed) более наглядный и структурированный способ разработки.

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

*Мой опыт с vue -это 1 день чтения документации и 1 день манкикодинга небольшого компонент для своего петпроекта, в общем я полный ламер во всех этих ваших фронтенд штуках*
С моей точки зрения стало хуже, в первом примере я долго не въезжал каким образом все драматически лучше организовалось, пока не понял, что единственное что приводит к организации это комментарии // Pet name, //Pet color….
Второй пример уже проще понять, но количество кода выросло на 30%.
Опять же, я в теме не разбираюсь, но стоит ли вносить такие изменения, которые помогают с «большими» компонентами в любой, даже самый маленький компонент(а на сколько я понимаю когда-то, в дальнейшем, новый подход станет единственным)?
Хотели разделение по фичам? Получите! Без изменения API! :)
Код
const petName = {
  data() {
    return {
      petName: ""
    };
  },
  computed: {
    header() {
      if (this.petName) {
        return "My Pet " + this.petName;
      }
      return "Enter Pet Details";
    }
  }
};

const petColor = {
  data() {
    return {
      petColor: "#000"
    };
  },
  computed: {
    petColorDarker() {
      return tinycolor(this.petColor)
        .darken()
        .toString();
    },
    shadow() {
      return "2px 2px " + this.petColorDarker;
    }
  }
};

const petSize = {
  data() {
    return {
      petSize: ""
    };
  },
  computed: {
    borderStyle() {
      switch (this.petSize) {
        case "Small":
          return "dotted";
        case "Medium":
          return "dashed";
        default:
          return "solid";
      }
    },
    headerSize() {
      switch (this.petSize) {
        case "Small":
          return "12px";
        case "Large":
          return "60px";
        default:
          return "30px";
      }
    }
  }
};

export default {
  components: {
    ColorPicker
  },
  data() {
    return {
      ...petName.data(),
      ...petColor.data(),
      ...petSize.data()
    };
  },
  computed: {
    ...petName.computed,
    ...petColor.computed,
    ...petSize.computed
  }
};

Хорошо! А теперь сделаем так, чтобы финальный мердж data/computed за нас делал сам фреймворк, и станет вообще отлично.

И получатся миксины

Ну да, и именно здесь на помощь приходит новое API, которое проблемами конфликта имен, как миксины, не обладает.

НЛО прилетело и опубликовало эту надпись здесь
Судя по статье (оригинал предлагаемых изменений не смотрел), это уже не VUE, а что-то другое просто :)
Vue.js действительно прекрасен простотой вхождения, однозначностью и стабильной работой.
это уже не VUE, а что-то другое просто

Верно. Это… тенденция.

Angular 1 -> Angular 2 — уже не Angular, а что-то другое.

React -> React 16.8 with Hooks — уже не React, а что-то другое.

Vue -> Vue 3 — уже не Vue, а что-то другое.

Всё верно. Это уже не те и не то! (От них если что и осталось, то только и только… название в качестве мимикрии. Не более того. Не более)

P.S.
Ах, да, мы же можем не переписывать старое! — Ну, да, через год никто не поймёт и никто не захочет вообще копаться в старом синтаксисе вообще от слова… совсем!
Или нет, в AngularJS/Angular!


Хоть убейте, но не могу понять а что плохого в AngularJS? Да он устарел, но он по прежнему позволяет быстро и просто сделать небольшое SPA, да и структура у него для новичков понятная, в общем мне кажется зря его так, да устаревший, но есть еще порох в пороховницах.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Adobe слишком долго тупил с ним. Тут все просто, кто протупил — тот выбывает.
многословен, например.
структура кода тоже не ахти получается

Поменяли шило на мыло. Могли же сделать нормально:


Заголовок спойлера
class MyComponent {

    @observable petName = ""
    @computed header() {
        if (this.petName) return "My Pet " + this.petName
        return "Enter Pet Details"
    }

    @observable petColor = "#000"
    @computed petColorDarker() {
        return tinycolor(this.petColor).darken().toString()
    }
    @computed shadow() {
        return "2px 2px " + this.petColorDarker
    }

    @observable petSize = ""
    @computed borderStyle() {
        switch (this.petSize) {
            case "Small":
                return "dotted";
            case "Medium":
                return "dashed";
            default:
                return "solid";
        }
    }
    @computed headerSize() {
        switch (this.petSize) {
            case "Small":
                return "12px";
            case "Large":
                return "60px";
            default:
                return "30px";
        }
    }

}

Ну и то же самое с разделением:


Заголовок спойлера
class PetName {

    @observable value = ""

    @computed header() {
        if (this.value) return "My Pet " + this.value
        return "Enter Pet Details"
    }

}

class PetColor {

    @observable value = "#000"

    @computed colorDarker() {
        return tinycolor(this.value).darken().toString()
    }

    @computed shadow() {
        return "2px 2px " + this.colorDarker
    }

}

class SizeToBorderStyle {

    @observable size = ""

    @computed borderStyle() {
        switch (this.size) {
            case "Small":
                return "dotted";
            case "Medium":
                return "dashed";
            default:
                return "solid";
        }
    }

    @computed headerSize() {
        switch (this.size) {
            case "Small":
                return "12px";
            case "Large":
                return "60px";
            default:
                return "30px";
        }
    }

}

class MyComponent {
    petName = new PetName
    petColor = new PetColor
    sizeToBorderStyle = new SizeToBorderStyle
}

Вариант с декораторами тоже рассматривался: https://github.com/vuejs/rfcs/blob/function-apis/active-rfcs/0000-function-api.md#type-issues-with-class-api


В итоге решили на stage-2 proposal не ставить, потому что рискованно.


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

В итоге решили на stage-2 proposal не ставить, потому что рискованно.

А риск-то в чём? Что их выпият из тайпскрипта? Сомнительно.

А при чем тут typescript если речь о JS фреймворке? Поддержка фремворком ts это лишь дополнительная плюшка.

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

Чем больше людей будет использовать декораторы и тайпскрипт, тем быстрее декораторы и типизация появятся в JS.

НЛО прилетело и опубликовало эту надпись здесь

Так проблема-то была в декораторах или в коннектах? Если что, connect (если вы имели в виду функцию из redux) можно и как обычную функцию вызвать...


А вот использование декораторов на свойствах как раз позволяет сделать так, чтобы компонент "дергался" когда нужно, а не на любое обновление стора. Но это придется от redux к mobx перейти.

НЛО прилетело и опубликовало эту надпись здесь

А что за бардак был с mobx?

НЛО прилетело и опубликовало эту надпись здесь

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

НЛО прилетело и опубликовало эту надпись здесь

На самом деле, в mobx можно без труда сделать почти такой же вызов connect как в редаксе, и писать не знающие про стор компоненты:


function connect(mapStoreToProps) {
    return function(WrappedComponent) {
        return function(props) {
            return <Store.Consumer> // ну или inject
                {store => <Observer>
                   {() => <WrappedComponent {...mapStoreToProps(store)} {...props} />}
                </Observer>}
           </Store.Consumer>
        }
    }
}

Так что инжектить "целые куски стора" в компонент было всего лишь вашим выбором...

НЛО прилетело и опубликовало эту надпись здесь

Так connect как раз и является усложнением, без него проще как бы.


Но когда "великая проблема библиотеки" решается 11 строками кода — это означает, что и проблема-то была не такая великая.

НЛО прилетело и опубликовало эту надпись здесь
devtools и mutability

А что с ними не так, кстати?

Ну, у react-devtools известные проблемы с прототипами, акцессорами и обработкой исключений.


Пишем простейший класс...


class Model {
    foo = []

    get count() {
        return this.foo.length
    }
}

… и получаем Uncaught TypeError: Cannot read property 'length' of null в devtools при попытке экземпляр этого класса просмотреть

Ну так это проблема react-devtools, а не mobx.

НЛО прилетело и опубликовало эту надпись здесь

Это ж MCVE. Разумеется, вот прям именно так же никто никогда не пишет.

НЛО прилетело и опубликовало эту надпись здесь

А где тут "джава стайл"?

НЛО прилетело и опубликовало эту надпись здесь

Это кусок модели. Написать его можно как угодно, тут приведен вполне допустимый способ.

НЛО прилетело и опубликовало эту надпись здесь

Нет никакого "реакт стиля" при написании модели; реакт отвечает лишь за View — в этом как бы его отличие от того же Ангуляра.

const test = new model; console.log(test.count);
Дело в том что свойство и геттер не статистика.

Это вы к чему?

Я ж говорю о том что есть библиотеки, которые не учат разработчиков чистоте кода.
Библиотеки ничему учить разработчиков и не должны. Это разработчик должен учиться пользоваться инструментом, которым он работает.
НЛО прилетело и опубликовало эту надпись здесь
Потому у редукса комунити в 100 раз больше чем у моба на сегодня

У редукса комунити в 100 раз больше — потому что хуяк-хуяк, накопипастил говнокода, назвал это «Я просто в ФП стиле писал, а не говнокодер» и в продакшн.
НЛО прилетело и опубликовало эту надпись здесь
Видел примеры не на редаксе которые вот такие хуяк-хуяк
Конечно. Но только на редаксе говнокод обожествляют.

ducks pattern, лучший
Знаю-знаю. Это тот, который ctrl+c, ctrl+v и наплодили кучу почти одинаковых уток.
НЛО прилетело и опубликовало эту надпись здесь

Увы, декораторы JS уже несовместимы с декораторами TS (а также с реализованными в babel, причем дважды). Так что популярность "устаревших" декораторов мало что изменит...

А в чём несовместимость?

Ну так почитайте пропозал-то...


Старая версия декораторов имела сигнатуру (any, PropertyKey, PropertyDescriptor) -> PropertyDescriptor?.


Текущая версия stage2 декораторов: ElementDescriptor -> ElementDescriptor & { extras: Array<ElementDescriptor > }. Как видно, сигнатуры принципиально несовместимые.


Разрабатываемая же версия stage2 декораторов, так называемые static decorators, вообще находятся в отдельном пространстве имен и образуют свой небольшой мета-язык.

Какой ужас, при обновлении тайпскрипта придётся переписать несколько функций.

Да пусть они уже хоть что-то выпустят! Такое ощущение, что декораторы в мусорке stage0 находятся, а не на stage2...

Но типизация — это вещь сугубо опциональная. Зачем она нужна на каком нибудь лендинге, где весь js — это слайдер и мобильное меню?

Затем, чтобы автодополнение работало и ошибки подсвечивались. Перспектива дебажить пол дня паршивый лендиг из-за мелкой опечатки — такое себе.

На лендингах вообще ничего ненадо кроме HTML и CSS. Но я раз за разом натыкаюсь на лендинги в один экран написаные на Angular/React/Vue. Это я объяснить могу исключительно тем что создаются они каким-то интересным генератором и в огромных количествах.

Либо кто то совмещает приятное с бесполезным.

В JS врятли появится типизация. Так как в рантайме она не нужна. Да и зачем тащить лишний код в браузер когда можно все проверить на этапе сборки?

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


Но появится она там всё равно вряд ли.

НЛО прилетело и опубликовало эту надпись здесь

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

Пока правда не понятно как они будут выкручиваться из данной ситуации с декораторами

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

Наверное, потому что не хотели чистый JS выпиливать)
То чувство, когда собрался учить Vue, радуешься русской документации, смотришь на комментарии этой статьи, и понимаешь, что не знаешь, что делать, как учить :(
Учить как есть. От небольшой смены синтаксиса базовые концепты не изменятся

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

НЛО прилетело и опубликовало эту надпись здесь

а Angular — это какой фронт? :)

НЛО прилетело и опубликовало эту надпись здесь
Стабильный, стандартизированный, многофункциональный.

Этакий Иван-аккордионист. Надёжный как скала, пока не выпьет. Простой как доска, пока не выпьет. И медленный, как трактор. Тоже, пока не выпьет.

Почему-то вспоминается "пик Баллмера"...

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

Вот-вот, я тоже недавно решился немного прокачать фронт, узнав получше про Vue, а тут какие-то перетряски. Простите за нубский вопрос, ибо я бекендер, но… посоветуйте, что есть легковесного для управления стейтом и домом без всяких вебпаков. Я пишу на asp.net, и иногда надо добавить динамики в DOM, а jquery и стейт в инпутах — явно не то, о чем я мечтал )) Или всё норм, уляжется, и можно сразу начинать с Vue 3?

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


Если же не Vue, то я бы предложил lit-element – библиотеку поверх веб-компонентов.

Я сам пытался как можно дольше не пользоваться webpack или другом компоновщика и разрабатывал все на requirejs. В какой то момент все ушло настолько далеко от модели без компоновщика что об этом уже никто не вспоминает. Конечно если у Вас все генерируется на сервере можно и jquery плюс простые скрипты. Авторы статьи как мне кажется немного сгустили краски. Так что не имеет смысла дожидаться пока все утихнет. В конце концов если vue 3 окажется фатально несовместимой с vue 2 что ещё не факт, то будут они сосуществовать параллельно. Есть тому пример что сейчас на первой версии Angular по прежнему разрабатывают приложения и не задумываются о переходе на более новые версии.

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


При такой постановке задачи vue вполне подходит.

Краткий ответ никак. Используйте webpack и компоненты. Это удобнее.
Vue + Vuex хорошее решение для Вас. Можете еще посмотреть в сторону нового и так же легковесного фрейморка Svelte. У них тоже хорошая документация с примерами, единственное не знаю как там с хранилище.
НЛО прилетело и опубликовало эту надпись здесь

сперва мне тоже не понравился новый синтаксис, но перечитав RFC через пару дней я прям влюбился в него, и жду когда же уже наконец выйдет 3 версия. новый подход это смесь лучшего из объектного стиля и из class components.

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

Объясните пожалуйста почему миксины это плохо?
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
А если нужно некоторую одинаковую логику сделать во многих компонентах, то как тут быть?
НЛО прилетело и опубликовало эту надпись здесь

HOC, scoped-slots, во вью3 hooks, вынос простых функций в отдельные js файлы

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


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


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


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

Спасибо за ответ. Я использую миксины как самодостаточные куски кода, которые выполняются отдельно от кода основного компонента. Как например trait в php.
Например:
В админке нужно реализовать возможность блокировать редактирование и создание новостей пока на сайте ведутся технические работы. Я создаю миксин, который раз в 10 секунд get запросом проверяет, не ведутся ли сейчас технические работы, если ведутся то показывается оповещение.
Миксин никак не взаимодействует с компонентом, а просто дополняет его.

"Самодостаточность" куска кода никак не поможет в случае конфликта внутренних имен.


И да, трейты в php имеют те же самые проблемы.

Хехе. Очень напоминает knockoutJS (явное описание value(), computed()) и нового reactJS (useHooks). На самом деле концепция с хуками оказалась довольно удобной. Думаю во Vue она тоже "выстрельнет". Разделение на уровне methods, computed и пр. куда менее логично, чем группировка на основе функциональностей. А тут либо хуки, либо миксины, либо инкапсуляция (2-й вариант от Vintage).

Хмм… выглядит как недоделанный svelte3

Я вот не понимаю, нравится вам v2, не нравится v3 — ну так напишите в ваших зависимостях 2.* и живите счастливо дальше, в чём проблема то?

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

Верующие всегда с ждут благодатного огня раз в год в великую субботу [ Эван опубликовал коммит 8 июня — суббота что как бы намекает]. И я вам напомню, что его не приход обозначает конец света. Чего, собственно, все и напряглись.
Более того, если так нравится vue2 — так пиши компоненты как раньше, старый синтаксис никуда не денется.
Надеюсь из-за этого недовольства vue3 не окажется с миксинами, компонентами по 500 строк и vue class component.
Основная проблема треш и угар начались не из-за RFC, а из-за того что Эван переписывал историю. В первой версии RFC новый новый синтаксис преподносился как Standart build, а поддержка старого Compatibility build. После поднявшегося вайна они изменили это на Lean и Standart соответственно.

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

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

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

вы немного отстали от жизни) давно уже не выходит «по фреймворку в неделю».
Три основных игрока уже давно закрепились. React/Vue/Angular.
И обратную совместимоть давно никто не ломал. Да и Vue 3 ее не ломает.
Хотя мажорная версия имеет на это полное право

Кпкой там версии у нас последний ангулар?

НЛО прилетело и опубликовало эту надпись здесь
Начиная со втрого это все один и тот же фреймворк, легко апгрейдящийся на следующую версию

Не припоминаю, чтобы прям-прям совсем ломали после 4-ки. Депрекейтили — это да, но там достаточно было времени (тем более если использовать всякие штуки типа HttpClient не напрямую, а через свой слой абстракции). Для Rx есть compat-прослойка, опять же.

Тут вот уже дважды упомянули некий Svelte, который "ещё более лучше". Добавил коммент в закладки :)

Svelte интересен концепциями, но не более. Можете посмотреть доклад Ильи Климова на эту тему, достаточно содержательно и отвечает на вопрос, почему у Svelte мало шансов занять большую нишу

Посмотреть где?

Лично мне нововведения зашли. Это неплохо позволит сделать код чище, разбить компоненты на составляющие, эдакое движение в сторону single responseability, но от части я и негодование могу понять, порог вхождения это немного увеличит (но вряд ли это будет критично)

Лучше бы уже сделали что-то с vuex, чтобы оно было не stringly typed. Бизнес-логика-то именно там находится, а не в компонентах.

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

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


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

Перемешивать необязательно, можно использовать DI. А если у вас бизнес логика хранится непосредственно в сторе как вы ее в таком случае мокаете? Выходит что у стореджа в таком случае 2 ответственности, это непосредственно хранить и обрабатывать данные, и еще бизнес логика (которую тоже неплохо было бы покрыть тестами)

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


А если у вас бизнес логика хранится непосредственно в сторе как вы ее в таком случае мокаете?

А в чем проблема ее замокать? Содержимое стора это просто POJO. Если вы про тестирование компонентов, так я тестирую именно сам компонент, полагаясь на то что стор работает как надо (т.к. покрыт отдельными тестами).
Иногда, если что-то большое/нетривиальное, я выношу код в отдельные чистые функции, которые потом просто вызываются из мутаций и т.д. Полагаю, до некоторой степени это можно назвать разделением стора и бизнес-логики.


и еще бизнес логика (которую тоже неплохо было бы покрыть тестами)

Ну вот у вас получается, что одна ответственность размазалась по стору и по некой отдельной бизнес-логике:)

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

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

А вот почему размазалась я не догоняю, разная же ответственность) бизнес логика не должна быть привязана к vuex. Во вью хорошо что кроме вьюкс по сути и нет ничего для стейта, но если рассматривать другие фреймворки, где для хранения стейта можно использовать не 1 механизм, то как тогда рефакторить код в случае смены стейта? перепиливать весь функционал? Это по меньшей мере предполагает что код открыт для изменения (а не для расширения). p.s. не холивара ради.
разная же ответственность

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


но если рассматривать другие фреймворки, где для хранения стейта можно использовать не 1 механизм

Ну это уже какой-то уж очень теоретический случай:) Честно скажу, реакт я уже здорово подзабыл, с хуками и контекстом даже не пробовал (вот там пожалуй да, стоило бы выносить бизнес-логику отдельно), а в ангуляре стейт и так хранится и управляется в отдельных сервисах. Или вы и в ангуляре пишете отдельный сервис для хранения данных и отдельный для работы с ними?


как тогда рефакторить код в случае смены стейта?

Да как обычно, нет?:) Мне моя IDE позволяет рефачить что угодно без особой головной боли.


В общем, вы меня пока не убедили, хотя, безусловно, дискуссия интересная и приятная:)

В общем, вы меня пока не убедили, хотя, безусловно, дискуссия интересная и приятная:)

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

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

это просто POJO

Что забавно — термин означает Plain Old Java Object, и используется программистами на других языках именно в такой форме, хотя Java иногда и не пахнет.
Наверное от того, что никому не хочется всерьёз дропнуть оттуда "J".

Plain Old JavaScript Object в данном случае:)


Еще встречал вариант POCO (С++/С# Object).

В случае с PHP звучит не очень хорошо.

Не повезло-с:)

Там еще и A(rrays) вместо O на конце должно быть :)
У этого термина целый спектр значений. Некоторые из них весьма двусмысленны. Наверное именно поэтому термин так полюбился разработчикам slangdefine.org/p/pojo-809e.html

Я бы не очень полагался на urbandictionary (откуда slangdefine явно парсит контент).

Vue достаточно хорош, я бы предпочёл, чтобы его не меняли вообще или меняли очень осмотрительно, так как случайные изменения могут легко превратить лучший в мире фреймворк просто в средний.
просто оставлю это здесь:
const sharedComputeds = {
    petColorDarker: function() {
      return tinycolor(this.petColor)
        .darken()
        .toString();
    },
    shadow: function() {
      return "2px 2px " + this.petColorDarker;
    },
}

export default sharedComputeds;

// -------

import { petColorDarker, shadow } from './sharedComputeds';

const MyVueComponent = {
    data() { /* ... */ },
    computed: {
        petColorDarker,
        shadow,
    }
}

А теперь сделайте то же самое с typescript
Иногда от количества вариаций синтаксиса рябит в глазах, и начинаешь с надеждой посматривать в сторону angular/typescript.
Это, как говорится, слишком много хорошо уже не очень хорошо.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории