簡體   English   中英

客戶端服務器數據交換持久性 - 氣味

[英]Client Server Data Exchange Persistence - Smells

假設我有一個客戶端將一些帶有輸入的 RunLogicCommand 發送到服務器。 服務器以一些輸出作為響應,該輸出是供用戶驗證的報告。 此時,服務器還沒有持久化任何東西。 然后客戶端在單獨的 SaveCommand 中發回整個報告,然后保存報告數據。

對我來說,這種交流的某些部分似乎沒有必要。 也就是說,一旦用戶驗證了報告,他們似乎就沒有必要將整個報告發送回服務器進行持久化。 也許一些敏感數據也有可能在這里暴露?

在這種情況下,典型的方法是什么?

我可以看到兩個選項:

  1. 用戶只需發送帶有 Input AGAIN 的 RunLogicCommand 並帶有一些指定它應該被持久化的標志。 我不太喜歡這個選項,因為邏輯可能很復雜並且需要一些時間來計算。
  2. 在服務器(或不同的服務甚至數據庫)上緩存報告,然后讓客戶端發回帶有報告 ID 的 SaveCommand 進行保存。

這些方法中的任何一種都有問題嗎? 有沒有更好、更典型的方法?

謝謝!

這里沒有單一的最佳解決方案:

您首先提到的方法的缺點是:

  • 網絡流量增加,可能增加成本並降低響應時間
  • 您能確定您發送的文件與收到的文件相同嗎? 你可以,但這需要額外的工作。
  • 正如您所提到的,敏感數據暴露的風險增加了。 但是,您將其發送給客戶端。

您的兩個選項中第一個的缺點是:

  • 兩次運行報告會增加服務器的負載,由於需要更多的處理能力而產生額外的成本。
  • 如果基礎數據在兩個請求之間發生了變化。 那么用戶驗證過的報告和數據庫中存儲的報告可能就不一樣了。

我會使用您的第二個選項的變體:

  • 報告生成后立即存儲在數據庫中,狀態為“等待用戶驗證”
  • 當用戶驗證報告時,將狀態更新為已驗證。
  • 為避免數據庫中有許多未經驗證的報告,您可以有一個批處理作業來檢查並刪除所有早於 x 天的未經驗證的報告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM