Постоянство обмена данными между сервером и клиентом - запахи - PullRequest
0 голосов
/ 20 марта 2020

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

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

Каков типичный подход в этом случае?

Я вижу два варианта:

  1. Пользователь просто отправляет RunLogicCommand с Input AGAIN с некоторым флагом, указывающим, что он должен сохраняться. Мне не очень нравится эта опция, так как logi c может быть сложным и занять некоторое время для вычисления.
  2. кэшируйте отчет на сервере (или другой службе или даже в БД), а затем просто отправьте клиенту команду SaveCommand с идентификатором отчета для сохранения.

Есть ли проблемы с любым из этих подходов? Есть ли лучший, более типичный подход?

Спасибо!

1 Ответ

1 голос
/ 21 марта 2020

Здесь нет единственного лучшего решения:

Минусы для подхода, который вы упомянули в первую очередь:

  • Увеличение трафика в сети c, потенциально увеличивая затраты и давая более медленный ответ раз
  • Можете ли вы быть уверены, что отправленный вами документ совпадает с полученным. Вы можете, но это потребует дополнительной работы.
  • Как вы упомянули, существует повышенный риск раскрытия конфиденциальных данных. Однако вы отправляете его клиенту.

Недостатки для первого из двух вариантов:

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

Я бы использовал вариант вашего второго варианта:

  • Сохраните отчет в базе данных, как только он будет сгенерирован, со статусом «ожидает подтверждения пользователя»
  • Когда пользователь проверяет отчет, обновите статус как проверенный.
  • Чтобы избежать Во многих непроверенных отчетах в базе данных может быть пакетное задание, которое проверяет и удаляет все непроверенные отчеты старше x дней.
...