Я прихожу из редукса (с сагами) и работаю над проектом 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, касающаяся этого, или то, что вы узнали из опыта, - это путь.