如何反駁服務端程序員聲稱SELECT出來的數據直接丟給客戶端的代碼最好?
比如我覺得數據有冗餘,讓他精簡一下,不用全部都發出來,還有希望有些數據能經過二次處理的
這對他來說的確是最省事最簡潔最有效率的做法,看不出你的勝算在哪,,,
@vczh 的方法是無效的,因為首先產品狗根本管不著伺服器端傳什麼數據,需求變更只會傳達到前端,所以這個程序員的做法是以不變應萬變,他把資料庫直接暴露給你了,所以除非需求要修改資料庫,他都完全不用修改任何代碼,而如果需要修改資料庫,他的修改也非常簡單。
這種情況,正確的反駁方式是用海量的請求對伺服器端發起DoS攻擊,令其不得不縮減傳輸數據大小和增加緩存來改善性能。
如果你的DoS也不能讓對方失去響應,或者你們根本沒有這麼大的流量,那麼說明他的設計就是合理的。那這個問題就只是兩個程序員工作量分配的問題了,這事兒應該找你的上級去反映。
任何設計原則其背後一定有其原因,拋開場景談原則的架構師都是十足的騙子——Ivony。設計介面時的確有不要太精確地配合前端的需求的動機,為了介面有一定的一般性。只返回前端需要的欄位,那麼前端增加顯示內容就要變更介面;把信息按前端需求格式化好,那麼前端變更呈現方式就要變更介面。
當然,介面最小化可以節省伺服器帶寬,可以為擴展和schema變更留出空間,可以防止前端依賴內部實現細節,這都需要取捨。
此其一。
你今天要求他介面最小化,明天需求變更,你又去找他增加返回數據,你多麼被動。
他今天堅持返回所有數據,明天伺服器壓力太大,他找你商量哪些數據可以砍掉,他多麼被動。
此其二。
誰幹活,誰說了算,誰為自己的決定負責。你最多盡到提醒義務。他以後發現自己決定錯誤,想精簡介面,你又沒有增加工作量,你基本上連利益相關者都算不上。
此其三。來,伺服器端程序員來說話了
這事我們真要具體情況具體分析1、那個伺服器端程序員工作的時候爽不爽,例如我現在很不爽,不是特別要緊的話,我就直接SELECT * 給你了,有冗餘的或者需要二次計算的,你自己在客戶端去搞,這事關情緒,當然也顯得特別的不夠Nice~~但是講Nice的話,是不是有人對伺服器端不夠Nice呢?
2、這個API有多個客戶端或多處在調用,為了照顧通用性,確實直接SELECT出來給你最好,並把結果在伺服器端做個緩存,這樣一來大家都能調用,由客戶端做二次處理。例如你只需要其中3個欄位,但其他人卻需要5個欄位,這個時候你說如何取捨呢?當然我可以把包含5個欄位的結果全部緩存起來,當你來調用的時候我二次處理只給你返回3個,但,這個又會涉及到我爽不爽的問題了(其實我是真心覺得沒什麼必要,無關情緒)……
把一些非核心的計算交給廣大人民群眾手中的客戶端去做,我覺得特別美啊~~如果數據訪問速度比較慢的話,那麼要求伺服器預先處理好數據再交給客戶端是合理的。這樣可以避免客戶端頻繁的訪問伺服器造成延遲,比如做一個手機上的應用,它可能走的是gprs網路非常慢,多一次數據訪問就會拖慢速度影響用戶體驗,這時候產品經理應該就跳出來和伺服器程序員開片了否則還真不好說怎麼反駁呢。
你可以說:「得了,你不用開發了,直接讓我把SQL拼好了傳給你吧」
呵呵呵呵
————————正經回復:如果放在哪會影響程序效率,你們之間是服務調用關係,這個時候如果有數據證明在服務端優化傳輸後能提高性能、節省成本,可以反駁——如果老闆不認為省錢比快速上線重要的話你也沒轍,是不?如果對性能沒影響,那麼一定程度上可以理解為過早優化,這時候更多的矛盾在於你們的工作量和工資之間的比例關係,我認為這個問題需要上級來解決。這根本就不是個技術問題。你讓人家多幹活,人家自然是要反抗滴。說什麼都是借口罷了。你要是給人家付加班費,估計就好說多了。
我看到這樣的人,一般會說,你覺得可以就可以唄。只要你把屁股擦乾淨,我不回來干涉你的自由。
反正我是知道這個屁股是擦不幹凈的,如果他擦屁股的能力那麼好,那也是他有本事,也是人才。服務端,客戶端都做。
所以呢,個人經驗是,找上級或者找產品都沒意義。關鍵是你先理解對方為什麼要這麼做。如果是你,你會不會這樣做。雙方理解是最關鍵的。別占著你認為你是對的這條路子一直走。沒用的。。。人家的思路毫無疑問也是對的我做客戶端的時候是每次都讓服務端儘可能的把數據給我,然後我來分析。除非不好弄,協調一下,對方也會響應。你幫他,他就會幫你。。
所謂開發,也是和人打交道,除非都是一個人開發,那是另一回事。
上面說的比較虛,來點實際點的。
給多數據有什麼好處呢?
1.服務端開發肯定方便很多,加欄位減欄位而已2.認識的你就要,不認識的你就不要。暫時不需要的也丟棄掉。以後擴展,服務端不用動,只需要你調整就行。否則,兩邊一起改。這個開發成本不是1+1=2.是1+1&>2的。前面同學說:
DoS攻擊的說法,不好意思,沒用。多一個位元組少一個位元組在DoS下沒明顯的區別。人家DoS的目的是拖垮你,如果沒做DoS防禦。這個借口什麼都不吐,光http的頭就能弄死你。簡單可依賴。。
除了一種情況。移動端~~~~移動端區別是非常大的。。流量就是錢。自己把前後端都做了最好
脫離了實際需求的改進都是耍流氓.你要先說說他這樣做造成了什麼不可挽回的壞影響?
你就按照他的設計邏輯,讓他把口令也這麼傳到前端,然後在前端判斷是否登錄成功。
讓產品狗給他上幾個需求變更
1、有點偷懶的嫌疑2、數據量太大3、在某些客戶端部署新版本成本較大的時候,如果客戶端只是按伺服器發來的數據直接顯示,而不是做二次處理,那麼當顯示數據需求變更時,成本會小很多。
那我覺得發請求最好寫中文,比如
?"給我客戶的數據,謝謝"
因為你們公司目前數據量不夠大.
好奇他對「最好的做法」怎麼解釋?
話說你也是服務端的開發,若問你自己,你怎麼答?我腦補一下:1、簡單就是美,以不變應萬變?(其實這種我做客戶端時最喜歡,當我這邊處理數據的方式要變時可以不等他立即來。當然,前提是冗餘不至於影響響應速度。)2、二次處理都推遲到客戶端可減少伺服器上的壓力?(這個理由經常出現,看似有道理,但大部分情況下也就是個借口)就是這樣的啊、、、、、、
客戶端是移動設備,網路條件差,所以服務端和客戶端需要想盡辦法,減少傳送不必要的數據。看著別人的客戶端在同樣網路下能登錄使用,我們的不能,還不想點辦法。
表示自己寫的簡單博客就是直接查下包裝成json直接返回,啥界面顯示都是js實現的
被前端折磨怕了吧
推薦閱讀:
※xlsx格式規範,不知類似文件應該從哪找?
※樹莓派集群,若要達到與伺服器相同的性能,需要多少個樹莓派?
※IT 公司需要前後端都懂的人嗎?
※PHP 開發中有效防禦 SQL 注入攻擊有哪些好方法?
※同時學三門編程語言是什麼體驗?