2009-05-29 53 views
4

所以我有兩個獨立的應用程序,我想發送消息之間。我碰巧使用NServiceBus,但這應該不重要。如何從應用程序A嚮應用程序B發送消息並讓他們都知道同一合同?如何在使用NServiceBus時跨應用程序共享消息類?

所以應用程序A有一類SecretMessage ...

public class SecretMessage : IMessage 
{ 
    public string Title { get; set; } 
    public string Body { get; set; } 
} 

這是將被序列化和應用B發送過線到App B.現在

的對象,我該怎麼辦聽取那種類型的消息,然後能夠將它們解除序列化爲同一個類?所以我可以使用它發送的數據,而不會成爲維護的噩夢。

應用程序B是否必須擁有該類的副本?這應該通過一個共享的消息類的DLL來處理,每個應用程序都有一個引用(我不希望)?是否應該在每個應用中將它們重新創建爲具有相同屬性的完全獨立的DTO?

我在這裏錯過了什麼嗎?

回答

6

它可能不是你想要的答案,但這裏的銀彈很少。

你真的只得到了幾個選擇,因此再視功能和水平型硬化要在消息類:

  1. 共享DLL的 - 好處,它可以是代碼+結構例如有用的構造函數,複雜的枚舉器,調試ToString實現等。強壯的版本控制。需要單獨的項目和分發DLL。
  2. 共享模式和代碼生成。爲您的類型聲明模式並使用代碼生成來創建類。這裏有許多不同的策略 - 一些示例:T4 Templating,Custom Code Generation,工具和庫,如CodeSmithProto.Bufs。搜索會找到你加載更多。可以非常強大 - 知道許多代碼庫,通過CodeGen從數據庫到UI的快速原型開始所有項目。你仍然需要分配模式。
  3. 序列化消息具有足夠的保真度以通過代碼DOM生成類型。每條消息都需要攜帶足夠的類型元數據來代表所有消息實例的代價。例如可空字段的表示。生成消息包裝類型也會有內在的第一次「發現」成本。
  4. 在弱結構(如名稱/值對)中序列化數據,然後生成類似字典的包裝類。弱打字 - 易於延長壽命。

那些確實是唯一的選擇。恕我直言#2然後#1按順序通常是最有用的模式。

+0

不錯的帖子。 #1和#2之間的主要區別就在於這些課程在哪裏生活?在#1中它是在分佈在#2中的項目中的DLL中,這些類是消費項目本身的一部分? – 2009-06-01 17:08:44

相關問題