1

私のアプリケーションには多くのモジュールがあり、元のビジネス フローは次のようになります。

A -> B -> C -> D

アプリケーションが成長するにつれて、顧客のニーズを満たすために代替フローが追加されます。

A -> B -> C -> D

A -> B -> C' -> D (C はオプションの操作を実行できるようになりました)

A -> D

A -> D' (D は C のオプション操作を実行できるようになりました)

単体テスト ケースの数と QC の手動テスト ロケットの数。

現在、私には2つの解決策があります:

  1. Dに渡す前に、AからB、Cを静かに作成し、Dへの入力の数を保証できます
  2. B、C をスキップし、D の入力を仲介型に調整し、Adapter を記述して A を変換します -> 仲介型

選択したソリューションは、以下の目的を満たす必要があります。

  • 柔軟なビジネス(顧客向け)
  • 高い処理性能
  • メンテナンス(ソースコード)

どちらを使用すべきか、またはより良い解決策があるかわかりません。

4

2 に答える 2

1

ワークフローシステムが必要なようです。個々のコンポーネントを構築して個別にテストしてから、ワークフローシステムを使用して、顧客ごとの構成でそれらを相互に接続できます。

Windowsワークフローと任意のJavaBPMソフトウェアがこのタスクに適しています。

于 2012-07-27T20:02:01.580 に答える
1

まず、私はあなたの問題を完全に理解しているわけではないので、私の仮定を述べてから、私の答えを提供させてください. 必要に応じて適応します。

仮定:

  • ビジネス プロセスは一連の操作をモデル化します。例: A はチェックアウト ステップで、C と C' は 2 つの異なるが類似した支払いステップです。
  • プロセスの各ステップは、共通のデータ セットの個別の部分で動作します。例: B は合計と割引を計算し (カートの内容を操作)、C と C' は合計を取得して何らかの支払いを開始します。
  • 既存の実装を可能な限り維持したいと考えています。

この場合、データ モデルと、各ステップがどの部分で動作するかを正しく理解していることを確認してから、これに基づいてステート マシンを構築します。

利点:

  • プロセスの各ステップは、1 つ以上の状態を使用してモデル化できます。遷移がデータ モデルに基づいていることを確認します。Paypal を使用して支払うかバウチャーを引き換えるかというユーザーの決定に基づいて、これを処理するための適切な状態に移行する決定状態を持つことができます。
  • 状態は個別にテストできます。単体テストは簡単に記述でき、手動テスト (決済プロバイダーとの統合テストなど) 用の顧客向け機能のハーネスを構築できます。
  • ステート マシンは通常、フットプリントが小さくなっています。これらは通常イベント駆動型であるため、アプリケーションのスレッド数を抑えます。状態にロジックのみが含まれ、データ オブジェクトに対してのみ動作する場合は、異なる同時実行プロセス間で状態インスタンスを再利用することもできます。これは、ステート マシン フレームワークによって異なります。

注意事項:

  • 状態を明確にし、多くの小さな状態に小さな専用操作を実行させます。カード決済またはバウチャーの決定が発生した場合は、これを疑似状態でモデル化します。
  • 神のオブジェクト (すべてを知っているオブジェクト) は避けてください。ステートがドメイン モデルの大部分で動作し始めた場合は、モデルまたはステート マシンのいずれかを改善することを検討してください。
  • すべてをイベ​​ント駆動型で非同期にするようにしてください。同期ステート マシンはスケーリングしません。非同期ではないサービスを呼び出す場合は、そのラッパーを作成します。

以前のプロジェクトで、この方法でビジネス フローをモデル化することに成功しました。エンドユーザーがモノを購入できる流れでした。さまざまな支払い方法の切り替え、バックエンド システムが利用できない場合の再試行など、多くの代替フローを処理する必要がありました。

ニーズに合わせて、独自のステート マシン フレームワークを開発しました。おそらく、プラットフォームで利用できるものを確認する必要があります。

于 2012-07-27T19:57:41.647 に答える