雖然我熟悉四人幫中所描述的設計模式,但在企業級別上,將會出現很多我從未聽說過的模式。希望有一個能夠激發我在工作中遇到的問題的解決方案:用於同步共享域模型的設計模式
我有三個一起工作的應用程序。我們稱他們爲ApplA,ApplB和ApplC。他們共享一些領域模型,例如類MyEntity
public class MyEntity
{
public Guid ID {get;set;}
public string Name {get;set;}
//other properties
}
用戶可以使用ApplA重命名這樣的對象。當發生這種情況時,應在和 ApplB和ApplC中進行操作。這是通過使用排隊(卡夫卡,但排隊系統的選擇可能無關緊要)啓用。遵循快樂的道路,這兩個應用程序都會從隊列中選取消息並執行各自的操作。
但是,替代路徑是ApplB或ApplC在處理隊列中的消息時失敗。假設應用程序ApplB失敗,則ApplC不應執行其操作,或者撤銷其操作。有沒有關於如何解決這些問題的模式/指導。
編輯:在上面的文字中,我談到了重命名MyEntity
,但我看到這個語句如何被誤解。重命名後,我不打算更改類名稱,而是重命名MyEntity
類型的對象(請注意屬性名稱)。所以爲了給出一個更好更明確的例子,考慮多個應用程序使用一個Person
實體。
public class Person
{
public Guid ID {get;set;}
public string FirstName {get;set;}
public string LastName {get;set;}
//other properties
}
如果一個人改變姓氏(當女性在荷蘭結婚,它仍然是常見的做法來把握自己的丈夫的姓),所有相關的應用程序必須執行一些業務邏輯。請注意,這不僅僅是更新一個數據庫的問題,更多的業務邏輯必須執行。現在,如果其中一個應用程序在其他方面取得成功時失敗,那麼採用何種模式/編程實踐來解決這個問題?
設計模式適用於同一應用程序中的代碼。沒有什麼是跨應用程序。您對三種應用程序的工作方式進行了描述,類似於**責任鏈**模式,但同樣只適用於同一應用程序中的代碼。考慮將這三個應用合併爲一個。 –
三個應用程序中的兩個是獨立的產品,我們不直接開發自己,我們只創建了插件。因此合併應用程序不是一種選擇。 – SimonAx
什麼插件?在我看來,你的應用程序正在調用其他兩個應用程序?如果是這樣的話,那麼你可以在你的應用中使用**責任鏈**模式來控制你如何調用其他兩個應用。 –