私はThe Gang of Fourで説明されているデザインパターンに精通していますが、エンタープライズレベルでは聞いたことがないパターンがたくさんあります。私が一緒に働いている3つのアプリケーションを持っている共有ドメインモデルを同期するためのデザインパターン
:うまくいけば、私が仕事で直面してる問題の解決策を刺激するものがあります。 ApplA、ApplB、ApplCと呼ぶことにしましょう。それらはいくつかのドメインモデルを共有する。クラスMyEntity
public class MyEntity
{
public Guid ID {get;set;}
public string Name {get;set;}
//other properties
}
ユーザはApplAを使用してこのようなオブジェクトの名前を変更できます。その場合は、 ApplBとApplCの両方で処理を行う必要があります。これは、キューイング(Kafkaを使用することで有効になりますが、キューイングシステムの選択はおそらく重要ではありません)。ハッピー・パスに続いて、両方のアプリケーションがキューからメッセージを取り出し、それぞれのアクションを実行します。
ただし、代替パスは、キューからメッセージを処理するときにApplBまたはApplCが失敗することです。アプリケーションApplBが失敗した場合、ApplCはそのアクションを実行しないか、またはそのアクションを元に戻す必要があります。そのような問題に対処する方法に関するパターン/ガイダンスはありますか?
編集:上記のテキストでは、私はMyEntity
の名前を変更について話しましたが、私はその文が誤って解釈される可能性がどのように参照してください。名前の変更では、クラス名を変更するつもりはなく、タイプMyEntity
のオブジェクトの名前が変更されています(Nameプロパティに注意してください)。したがって、より明確でより明確な例を提供するには、Person
エンティティを使用する複数のアプリケーションを検討してください。
public class Person
{
public Guid ID {get;set;}
public string FirstName {get;set;}
public string LastName {get;set;}
//other properties
}
人が姓を変更した場合(オランダの女性が結婚したときに、彼らの夫の姓を取るために、それはまだ一般的な方法です)、関連するすべてのアプリケーションは、いくつかのビジネス・ロジックを実行する必要があります。あるデータベースが更新されるだけでなく、より多くのビジネスロジックが実行されなければならないことに注意してください。今、他のアプリケーションが成功している間にアプリケーションの1つが失敗した場合、そのような問題にどのようなパターン/プログラミング手法が対応していますか?
デザインパターンは同じアプリ内のコード用です。クロスアプリはありません。あなたは、3つのアプリケーションがどのように機能するかについての説明です**責任の連鎖**パターンに似ていますが、同じアプリ内のコードに対してのみです。 3つのアプリケーションを1つに統合することを検討してください。 –
3つのアプリケーションのうちの2つは、自分自身を直接開発するのではなく、単なるアドオンを作成したスタンドアロン製品です。したがって、アプリケーションのマージはオプションではありません。 – SimonAx
アドオンは何ですか?あなたのアプリは他の2つのアプリを呼び出しているようですか?その場合、アプリの**チェーン連鎖**パターンを使用して、他の2つのアプリの呼び出し方法を制御できます。 –