Какова грубая архитектура функции фаворитов / звезд в Gmail?

Просто для полноты, если вы хотите сделать это, не используя Counter, вот еще один очень короткий путь, используя понимание списка и встроенное dict:

from string import ascii_lowercase as letters
with open("text.txt") as f:
    text = f.read().lower()
    print dict((l, text.count(l)) for l in letters)

f.read() прочитает содержимое всего файла в переменной text (может быть, плохая идея, если файл действительно большой); то мы используем понимание списка для создания списка кортежей (letter, count in text) и конвертируем этот список кортежей в словарь. С помощью Python 2.7+ вы также можете использовать {l: text.count(l) for l in letters}, который еще короче и немного читабельнее.

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

0
задан Ryan Spicer 5 March 2019 в 23:27
поделиться

2 ответа

Как уже упоминалось в комментариях, я думаю, что лучший подход - это «надеяться на лучшее».

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

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

Если запрос заканчивается, и звездочка по какой-то причине оказалась недействительной, вам придется отобразить сообщение об ошибке определенного типа и отменить пометку элемента.

0
ответ дан tehp 5 March 2019 в 23:27
поделиться

Я думаю, что концепция, которая может быть полезна здесь, это «оптимистичный интерфейс». Это шаблон, обычно используемый для того, что вы описываете, чтобы поддерживать тесную обратную связь с пользователем, указывая ему, что его действие что-то сделало, предполагая положительный результат, когда что-то (например, HTTP-запрос) выполняется асинхронно, и если есть ошибки, вы можете вернуть положительное состояние и предупредить пользователя о проблеме.

На практике в React, если вы используете что-то вроде Redux, вы можете создать некое «архивное» действие, которое устанавливает состояние для каждого выбранного элемента как «заархивированное» в редукторе, и в то же время снимать запрос к бэкэнду обновить сервер с архивным состоянием. Предполагая, что вы используете async/await для создания запроса к серверу, вы можете заключить его в try/catch, где catch обнаруживает неудавшийся запрос и восстанавливает «заархивированное» состояние выбранных элементов в редукторе и, возможно, показывает ошибку сообщение пользователю.

0
ответ дан Chris Forrette 5 March 2019 в 23:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: