C# 多線程與OOP設計處理接線員?

最近在學習C#,遇到這樣一個情形。假如在一個客服中心,有三種職工,分別是: 普通職工(E表示),技術(T), 以及主管(M)。當有電話打進來的時候,如果沒有空閑的普通員工,或者她們解決不了,則需要上報到技術. 如果技術無法解決問題,則需要上報到主管。在這樣的設定下,設計一套OOP框架,並且使用多線程(Threading).

1.OOP設計部分。我的想法是abstract class EmployeeBase:List&, IActions{} 意思是虛基類,繼承包含Call類型的List,這個用於保存每個員工解決了什麼問題。IActions介面中聲明一些員工的行為,比如handleCalls(). 然後 E,T,M均繼承這個類。 這個類的設計不知道大家覺得有沒有問題,或者更好的框架。

2.線程這部分,我不清楚用線程處理什麼問題,怎麼處理。應該是與員工處理電話這部分,我困惑的是 a)每一個員工(所有類型的)都是一個thread嗎?那麼我應該在EmployeeBase也同樣繼承Thread難道?b)Thread是如何跟OOP結合在一起的呢?在員工處理電話或者移交向上一級的時候,在線程方面應該怎麼處理呢, 該注意什麼?c)這種情況是生產者消費者么? 大神們要是能給出具體例子那就太感謝了。

3.因為我在用Unity,所以不考慮async/await(我也不太清楚怎麼跟OOP結合..T T). C# 的Thread在Unity里也是可行的,雖然不是安全的。

啊,問題比較多,還請各位多多支招~


典型的工作流嘛,隨便找篇文章看一下Windows Workflow Foundation,當然我不是叫你去用,只是讓你去看一看人家是怎麼使用圖形來表達你的業務邏輯的。等你弄明白了之後,你把工作流裡面所有的箭頭都做成async operation。因為你不想用async-await所以當然也沒有Task,你就去模仿古老的Begin+End+IAsyncResult的方法好了。最後做成非同步的,大功告成。

這裡面沒有什麼OOP的東西。


我感覺每個人是一個線程吧,而且每個崗位還要有一塊專門負責調度線程的工作。。。。這樣看起來就像是一個線程池?

我只是隨口說說,拋沙引玉


不要把靜態的OOP設計(類的繼承)與動態的程序執行(threads以及任務傳遞)混在一起說。

當你有了較多的採用多線程以及線程間協作來解決問題的經驗後,你就明白究竟什麼是面向對象了。


ood方面應該按照skill來分出不同的queue,inbound call可以根據用戶在ivr的選擇分配到相應的queue上。service rep根據自己的skill註冊到對應的queue上。queue上有線程來dispatch call到service rep。

注意會有multi skill的service rep,每個skill也會有不同的skill level,以便按需要escalate case到高級的人來處理。

要懂業務。。。


推薦閱讀:

為什麼CryEngine、Unreal這些行業頂級引擎,代碼寫得這麼亂?
大型3D遊戲是如何將地圖做得很大卻避免讀條的?
在Unity 舉行的VISION SUMMIT 2016大會上主要宣布哪些新技術呢?
未來的手遊行業使用虛幻四引擎會更加有利嗎?
Unity3D剛體受力情況如何取得?

TAG:編程 | Unity遊戲引擎 | 面向對象編程 | C# | 多線程 |