耗時很長的服務器端事件中讓客戶端得到中間過程信息的更合理的解決方案
我認為《耗時很長的服務器端事件中讓客戶端得到中間過程信息的合理解決方案》一文中的解決方案不合理,屬於技術的誤用,滿篇的ajax這個詞很容易給讀者造成誤導 。
原需求:
B/S結構的系統裡,用戶點一個按鈕系統開始發送上千封郵件,要求把發送信息(發送成功數,失敗數,剩余數量...)動態實時的反饋給客戶.
原文的技術誤用之處:
(1)ajax,pageload 這些ui層的東東滲透到邏輯層裡去了
(2)thread的職責太多
並不是網頁上的多線程不好搞,而是Web開發搞久了,基本的OO設計能力下降了,或者根本就忽略OO設計了,眼中只有頁面。
以原文這個例子而言,你不把它當成Web開發,一切就變得很簡單了。
我的解決方案:
首先,得有一個類管理每條信息。
public abstract class MessageHolder { public DateTime SendTime { get; set; } public String ReceiverMail { get { return Receiver.Mail; } } public String ErrorMessage { get; set; } public Int32 SendCount { get; set; } public Boolean SendExpired { get { return SendCount > 5; } } public Boolean SendOk { get; private set; } public Guid Id { get; private set; } public String SendResult { get { if (SendOk) return "發送成功"; else { if (SendExpired) return "發送失敗"; else return "等待發送"; } } } } public class MailMessageHolder : MessageHolder { public String Title { get; private set; } public String Text { get; private set; } }