如何反駁服務端程序員聲稱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 注入攻擊有哪些好方法?
同時學三門編程語言是什麼體驗?

TAG:程序員 | PHP | 客戶端 | 移動開發 |