私たちはSOAエンタープライズに向けて努力しています...
メンバーの詳細を更新するための 3 つのオプションが与えられた場合、どのように契約を設計するのでしょうか?
ビジネスプロセスは非常に簡単です。顧客が電話 (または自分でログイン) し、個人情報を更新して、最新の詳細を入手できるようにします。顧客の雇用主は、メンバーの詳細を提供することもできます (これは一括で行われます。一度に数十から数千になる可能性があります)。これは、将来的に彼らと正しく通信できるようにするためです。複数のバックエンド システムがあります。
詳細は次のとおりです。
- 電話番号、
- 住所、
- Eメール、
- 名前または会社名、
- 連絡窓口、
- タックスファイルナンバー、
- 配偶者の有無
- 喫煙者の状態
現在のところ、ビジネス ルールは次のとおりです。 有効なタックス ファイル番号が既に提供されている場合は、再度提供することはできません。(オーバーライド可能) 有効な住所の詳細が存在する場合、雇用主はそれらを更新できず、初回のみ提供します。
オプション 1: 1 つの操作、Member.UpdateDetails
- 作成および管理するサービスは 1 つだけです。
- ビジネス ルールが大きくなると、このサービスのまとまりが失われる可能性があります。
- 何かを削除する必要があることを指定することと、そのままにしておくことを区別しなければならないという問題があります。
- 単一の作業単位、単一のトランザクション。
オプション 2: 4 つの操作に分割します。Member.UpdateContactDetails; Member.ProvideTaxFileNumber; Member.UpdateName; Member.UpdateDemographics
- 単一の操作を簡素化する可能性があります - 複雑さを 4 つの操作に分散させます。
- 何かを削除する必要があることを指定することと、そのままにしておくことを区別しなければならないという問題がまだあります。たとえば、結婚歴なしで喫煙者のステータスのみを指定したい場合はどうでしょう。
- これらを正しくグループ化する方法を理解するには、詳細な分析が必要 - まとまりはビジネス プロセスによって異なります。
- 作成および保守するサービスが増えました。
- トランザクションが問題になる - 発信者によって複数のトランザクションが処理されますか?
オプション 3: より小さなスチルに分割します: Member.UpdateAddress; Member.UpdateBusinessDetails; Member.UpdateContactNumbers; Member.UpdateContactPerson; Member.UpdateEmailAddress; Member.UpdateMailingAddress; Member.UpdatePhysicalAddress; 等
- 何かを削除する必要があることを指定することと、そのままにしておくことを区別しなければならないという問題を取り除きます。
- ビジネス ルールは、どのような操作でも簡単に進化できます。
- 作成および保守するサービスの負荷。
- トランザクションが問題になる - 多くのトランザクションが発信者によって処理されますか?
- プロパティ セッター / CRUD のように見え始めます - どうやらダメです。
オプション 1 または 2 で、発信者が自宅の電子メール アドレスのみを更新したいとします。クライアントがメッセージ全体を完了するとは期待できません。クライアントは他のすべてのタグを除外しますか? この問題に対処するための、受け入れられている明白で直感的なパターンは何ですか?
これが実際にパターンである場合、クライアントはどのようにフィールドをクリアするか、または null に設定しますか? .NET では、サーバー コードで、提供されていないものと null を区別する明確な方法がわかりません。明らかではないので、これは受け入れられないパターンだと思います。