Каков наилучший способ хранения пользователя Follow Relationship в Redux в нормализованной форме? - PullRequest
0 голосов
/ 20 сентября 2018

Я создаю некую социальную сеть, в которой пользователи могут следовать друг за другом, но я не могу понять, какой лучший способ сохранить отношения пользователя с пользовательскими отношениями в избыточной форме, у меня есть в основном 2 способа, один из которыххорошо, ?я также буду внедрять обновления в реальном времени для кнопки «следовать»,

entities : {
    usersById : {
        userId : {
             isFollowedByMe : true/false
         }
    }
}

или другой карты.

entities : {
    usersById : {
        /*   */
    } 
},
relationships : {
    userFollowMap : {
        targetUserId : true,
        anotherTargetUserId : false,
    }
}

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

1 Ответ

0 голосов
/ 24 сентября 2018

Redux не заставляет вас использовать нормализованную форму.И этот вопрос выходит далеко за рамки избыточности.

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

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

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

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

...