Опыт относительно единоличной ответственности в vuex - PullRequest
0 голосов
/ 02 апреля 2019

Я прихожу из редукса (с сагами) и работаю над проектом vuex.Я рассматриваю 2 различных способа настройки действий и ищу опыт и причины, по которым я мог бы выбрать один из других.Например, рассмотрим действие fetchPermissions ();

В варианте A действия могут выглядеть следующим образом:

export const fetchPermissions = async ({commit}) => {
     commit('setLoading', true);
     const response = await api.get('permission/permissions');
     if(response.data === success) {
         commit('setPermissions', response.data);
         commit('setLoading', false);
     }
     else {
         commit('setError', response.data);
         commit('setLoading', false);
     }
};

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

Альтернативой (также избыточным способом) было бы иметь действия с единственной ответственностью, что-то более похожее на:

export const fetchPermissions = async ({commit}) => {
     commit('setLoading', true);
     const response = await api.get('permission/permissions');
     if(response.data === success) {
         dispatch('fetchPermissionsSuccess', response.data);
     }
     else {
         dispatch('fetchPermissionsSuccessFailure', response.data);         
     }
};


export const fetchPermissionsSuccess = async ({commit}, data) => {
     commit('setPermissions', data);
     commit('setLoading', false);
};


export const fetchPermissionsFailure = async ({commit}, error) => {
     commit('setError', error);
     commit('setLoading', true);
};

Мне нравится вариант A, потому что команде было бы легче следовать за ним, и это сокращает количество действий на 66%, поэтому намного меньше.

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

Существует ли рекомендация vuex, касающаяся этого, или то, что вы узнали из опыта, - это путь.

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