1

私は初心者としてWindowsWorkflow4.5の技術的な詳細と実装を掘り下げており、まともな結果を得ています。私の質問は、「なぜ、いつ」という質問と「方法」の質問のどちらかということです。

私は私たち全員に馴染みのある概念を採用し、ビジネスロジックをWF、つまりユニバーサルログオンプロセスに抽象化しました。私が達成したかったのは、MVC WebサイトやWindowsフォームアプリケーションなどから呼び出すことができる再利用可能なロジックを持ち、すべてを同じワークフローで実行することであり、それを達成しました。

ここで、WFを「いつ」適用するかとコードをいつ使用するかについて2つの概念的な質問があります。

1-例として簡単な検証を取り上げます。ログインしようとしていますが、空のユーザー名またはパスワード文字列を渡しました。明らかに、私はエンドユーザーに「UserNameRequired」と「PasswordRequired」というメッセージを送り返したいと思っています。さて、私がそれをした方法は、検証クラス(重要な場合はFluentValidation NuGetパッケージ)を持っていることですが、重要なことは、これをコードで実行していることです。したがって、WFでは、ExecuteMethodを介して検証コードを呼び出し、すべてが正常に機能します。私の質問は:これはWFの考え方では間違ったアプローチですか?インラインWFの「If」アクション/決定を実行し、コードのチャンクを呼び出すのではなく、WF内で検証メッセージを直接構築する必要がありますか?私' 検証だけでなく、私たち全員が関係できる概念として、より一般的には、できることすべてをWF自体に入れようとするべきですか、それともカスタムコードを呼び出す方がよいでしょうか。私は、可能であれば誰かの意見ではなく、WFの経験を持つ経験豊富なソフトウェアアーキテクトからの推論によるベストプラクティスをもっと探しています。

2-別のマシンでワークフローを取得します。したがって、同じログインワークフローアクティビティの一部には、サービスメソッドの呼び出しが必要です。ワークフローがインターフェイスメソッド「AuthenticateUser」を持つILogOnServiceのInパラメーターを受け取るようにコードとワークフローを記述しました。私が渡している具体的な実装は、MVC4 Web Api postメソッドを非同期で呼び出して、標準のAsp.NetメンバーシップValidateUserを実行します。繰り返しますが、WFワークフロー内からこのWeb Api PostAsyncを呼び出す必要がありますか?もしそうなら、私のワークフローをAsp.Netメンバーシップと私の特定のサービスの選択に密接に結び付けないでください。ワークフローを特定のポイントに到達させてから、別のマシンでプロセスを再開する方法があるようです。たとえば、サービスが実行されている場所で、プロセスを続行しますが、私は

このテクノロジーのプロからいくつかのガイドラインとアイデアを探しているだけですが、私は最も有益な答えを選びます。

4

1 に答える 1

2

ワークフローの詳細を実装するために C# コードを使用しても問題はありません。実際、私は常に、WF4 を標準のすぐに使用できるアクティビティで使用している場合、おそらく間違ったことをしていると言っています。ビジネスのビジネス アクティビティをモデル化するカスタム アクティビティを作成するか、他の人に作成してもらう必要があります。これが、FluentValidation を使用してログインを検証するアクティビティを作成することを意味する場合は、まったく問題ありません。別の機会に、低レベルの WF4 アクティビティから高レベルのビジネス アクティビティを構築する場合は、それらを組み合わせて、自分のケースで最適に機能するようにしてください。

PostAsync のようなものを使用してサービスを呼び出すことは、アクションの有効期間が短く、通常は利用可能であることがわかっている場合にうまく機能します。ただし、SOA スタイルを使用する場合は、一時的なデカップリングの使用を実際に開始する必要があります。そのため、あるサービスがすぐに利用できる別のサービスに依存しているわけではありません。そして、一時的なデカップリングに入ると、MSMQ や別の同様のテクノロジなど、キューを使用したくなるでしょう。したがって、その場合、応答キューを使用して一方向メッセージを送信し、ワークフローをアイドル状態にして、応答メッセージが到着するのを待つ必要があります。これにより、おそらく別のマシンでワークフローがリロードされます。これは常に適切であるとは限りません。たとえば、メンバーシップ サービスが利用できなかったために 1 日後にログインを許可してもあまり役に立ちませんが、非常にスケーラブルでフォールト トレラントなシステムになる可能性があります。もちろん、これらのシステムは適切に設計するのが非常に難しいため、無料のランチはありません。

于 2013-03-04T20:32:57.477 に答える