《Effective C#》读书笔记——条目28:提供粗粒度的互联网API使用C#表达设计
在使用Web服務(wù)、.NET遠(yuǎn)程調(diào)用或給予Azure的程序時(shí),最耗時(shí)的就是與遠(yuǎn)程服務(wù)器之間傳輸過程。如果只是簡單的將本地API封裝一下,就變成遠(yuǎn)程使用的API,這樣做功能上不會有問題,但是效率低下。API的粒度越細(xì)所花費(fèi)在等待數(shù)據(jù)返回的額外事件也就越多。
在創(chuàng)建基于Web的服務(wù)時(shí),客戶端和服務(wù)器的通信過程應(yīng)該向發(fā)送傳真一樣:客戶端可以獨(dú)立、不需要與服務(wù)器取得聯(lián)系的情況系下工作一段時(shí)間。然后在一次通信所需要的所有數(shù)據(jù)就位之后,再讓客戶端一次性把所有信息發(fā)送給服務(wù)器。服務(wù)器端也應(yīng)該如此:將數(shù)據(jù)從服務(wù)器發(fā)送給客戶端時(shí),應(yīng)該一次性的發(fā)送所有內(nèi)容,讓客戶端能完成當(dāng)前所有的任務(wù)。
現(xiàn)在讓我們做一個(gè)假設(shè):該系統(tǒng)僅有一個(gè)服務(wù)端,還有超過100萬的客戶。假設(shè)每個(gè)客戶在去年一年中平均進(jìn)行十五次訂購。每個(gè)電話銷售都在訂購過程中操作一個(gè)客戶端,且在接聽電話的過程中需要查詢或創(chuàng)建客戶。我們該如何設(shè)計(jì)出一個(gè)最有效的客戶端和服務(wù)器端傳遞的一系列對象呢?在這里一次性的將每個(gè)客戶和每個(gè)訂單發(fā)給客戶端是不現(xiàn)實(shí)的:100萬客戶和1500萬的訂單記錄對應(yīng)的數(shù)據(jù)實(shí)在是太多了。
設(shè)計(jì)與遠(yuǎn)端計(jì)算機(jī)通信的Web服務(wù)時(shí),我們希望同時(shí)降低通信的頻率以及每次通信時(shí)傳遞的數(shù)據(jù)量。這兩個(gè)目標(biāo)是魚和熊掌不可兼得的,我們必須在這二者之間取得平衡。我們應(yīng)該進(jìn)盡量不要走向兩個(gè)極端,但可適當(dāng)選擇較少通信次數(shù),并盡量一次傳輸更多的數(shù)據(jù)。
?
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的《Effective C#》读书笔记——条目28:提供粗粒度的互联网API使用C#表达设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EMOS SPF开启收不到信 及WEB收
- 下一篇: main_loop()函数解析(1)