2017-07-18 7 views
0

私は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つが失敗した場合、そのような問題にどのようなパターン/プログラミング手法が対応していますか?

+0

デザインパターンは同じアプリ内のコード用です。クロスアプリはありません。あなたは、3つのアプリケーションがどのように機能するかについての説明です**責任の連鎖**パターンに似ていますが、同じアプリ内のコードに対してのみです。 3つのアプリケーションを1つに統合することを検討してください。 –

+0

3つのアプリケーションのうちの2つは、自分自身を直接開発するのではなく、単なるアドオンを作成したスタンドアロン製品です。したがって、アプリケーションのマージはオプションではありません。 – SimonAx

+0

アドオンは何ですか?あなたのアプリは他の2つのアプリを呼び出しているようですか?その場合、アプリの**チェーン連鎖**パターンを使用して、他の2つのアプリの呼び出し方法を制御できます。 –

答えて

0

あなたは方法論の一部としてドメインモデルに言及しているので、私はpatterns for context mapping in the context of DDD (domain-driven design)の答えを提案するつもりです。ドメインモデルは、異なるコンテキスト(アプリケーション)で類似している場合とそうでない場合があります。

  • 別々の道
  • 順応
  • 腐敗防止層を

    • 共有カーネル
    • 顧客/サプライヤーの開発チーム:あなたは、リンク上の各パターンについての詳細を読むことができますが、ここではそれらは

    私が誤解していないならば、Apache Kafkaは一種の「反腐敗層」です。モデリングが異なるレベルであるので

    ドメインパターンは、GoFの(ソフトウェアクラスパターン)の範囲外です。

    "名前の変更"の問題に関しては、クラス名の変更についての詳細や名前に関する他のアプリケーションの前提条件について詳しく説明していません。大学で働くはずのアプリケーションで、 "Student"というドメインクラスの名前を "Fish"に変更しても意味がありません。それは実際に何度も仕様に依存します。

  • +0

    @SimonAx人が名前を変更し、自分自身を更新できなかった場合は、これを処理するフォールトトレランスパターンが必要です。ロバート・ハンマーには本があります。オペレータが失敗したアプリの名前を手動で修正するか、他のアプリから元の名前に戻すなど、人間の介入を伴うパターンもあります。自動化されたソリューションもあります。 – Fuhrmanator

    関連する問題