Web 服務或 .NET 遠端處理中,跨機器物件傳輸是最昂貴的操作。將本地介面直接封裝為遠端 API 雖可運作,但效率極低——猶如用電話逐筆詢問填寫傳真單,頻繁等待網路回應。
客戶端應在本地組裝完整物件圖,填妥所有資料後一次性送至伺服器;伺服器處理完畢後,一次回傳所需結果。這類似「填妥傳真單一次發送」。
// 伺服器端建立客戶
Customer c = new Server.Customer();
// 多次跨網路往返設定屬性
c.Name = dlg.Name.Text; // 第 1 次往返
c.shippingAddr = dlg.Addr; // 第 2 次往返
c.creditCardInfo = dlg.credit; // 第 3 次往返
// 客戶端本地建立並填充
Customer c = new Customer();
c.Name = dlg.Name.Text;
c.shippingAddr = dlg.Addr;
c.creditCardInfo = dlg.credit;
// 單次往返送至伺服器
Server.AddCustomer(c);
單一 Customer 物件未必是最佳傳輸單位。以百萬客戶、千萬訂單的呼叫中心為例:
核心原則:在「往返次數」與「封包大小」間尋找平衡點,避免極端細粒度或粗粒度設計。