兩個人之間互不相識,則無法交往,兩個系統之間互相不能識别,那麼也就不可能互相通訊。但是人有一種社交能力,這種能力可以保證兩個不相識的人,互相認識,開始交往。兩個系統之間沒有這種能力,是以不能通訊,為了實作任意系統之間的通訊,則所有系統必須都具備社交能力。在網絡上的一個具備社交能力的系統,可以在滿足某些條件的情況下(比如閑的無聊,比如需要幫助等等),自動查找和自己一樣具備社交能力的系統,找到之後,可以互相“握手”,互相“交談”,進而可能開始通訊。兩個子產品之間可以自由的調用,也同樣必須具備社交能力方可,一個子產品可以自動找到附近的(比如某個或某些目錄下)的具備社交能力的子產品,詢問這些子產品能夠實作什麼功能,如果是自己需要的,則調用這些功能,否則繼續尋找。
人為甚麼具備社交能力,因為人首先具備一些統一的接口,這些接口就是眼睛、耳朵、嘴巴、肢體、容貌等等,其次還具有一些社交的常識,例如見面之後的你好,握手,微笑,談論簡單的感興趣的話題,等等,然後根據交流的内容決定是否繼續交往,還是就此打住;兩個系統或子產品之間要進行通訊,應該具備社交能力,首先也必須具備一些一緻的接口,具備一些系統之間通訊的常識,兩個系統相遇之後,通過常識進行應答,應答之後決定是否繼續交往。一個子產品可以搜尋自己的周圍,看十分有具備“社交能力”的子產品,如果有,則跟這些子產品進行初步的“社交活動”,初步的社交活動之後,決定是否互相調用,也就是進一步的交往。
這裡的系統可以是同一個機器上的程序,也可以是不同機器上程序,系統之間的通信,可以了解為程序間的通信。 子產品可以了解為一個個的DLL,或COM元件,或.NET元件,子產品之間的交往,也就是程序内部子產品之間的通信。
0):确定通訊方式,是使用Socket通信,還是使用SendMessage,還是使用MailSlot,或者是,Net Remoting。首先以第一種方式Ask,如果沒有人回答,再使用第二種方式Ask。知道收到答複。這就像你在大街上需要幫助,或者希望跟别人聊天,你首先用漢語Ask,“誰能夠幫助我?”,結果沒有人聽得懂;接着你用英語Ask,結果還是沒有人聽得懂,直到你用德語Ask,才有一個漂亮的小姐回答你。
1):确定系統基本的初步接口。例如Ask(bool bBroadcast,),Reply(),OnHeard()
2):确定系統社交的常識。A系統Ask之後,B系統安裝什麼方式回答,每一種回答具有哪些意義?A系統OnHeard()之後,應該如何回答,每一種回答又哪些意義。
3):兩個系統經過初步交往之後,發現有共同語言,A系統希望B系統提供自己關于青藏鐵路售票的資訊,B系統恰好有這些資訊,則兩個系統開始交換資料。
具備社交能力的軟體很有趣,要實作這樣的軟體,在系統內建方面将非常有用。或許,我會将這種軟體的設計模式,寫入我的關于UniObject有關的設計之中。