背景
最近の請求書やビジネス償却、よりN状態よりも持っています。明確なビジネスロジックを作る決定の還元条件、状態機械モデルを考えます。戻る増減状態を、彼はすぐにグローバルな視点を構築することができます。理想的には、現実は非常に細いです、いっぱいです。
技術選択の道
Java開発者として、最初に考えたのは、すべての後、春には十分に強いです、ステートマシンの春のファミリーです。食事の後は、アップを実行し、次のように、彼らの基本的な期待や要請を終了する前にそれをキャッチ:
- ビジネス・オブジェクト自体は、フィールドに基づいて、各ステート・マシンが初期化を行い、ステータスフィールドを持っています。
- ビジネスオブジェクツは、そのフィールドコンテンツに容易に拡張する必要があるイベントを受け取ることができます。
- ビジネストランザクションコンテキストの状態変換処理の一貫性のある強いです。
後でSSMと呼ば春州立町に相当し、。
- 初期化。SSMは、グローバルなステートマシンに基づいています。、特定の状態遷移に後続のサービスオブジェクトのすべての対応するノードおよびエッジを維持しながら、グローバル状態マシンであるもの後、ステートマシンは、すなわちを初期化します。公式文書にも提案されているグローバルにユニークな、オブジェクトは大物に属していることを述べました。公式にこの理由は、同時使用に問題がある、不適切な使用は、デッドロックが発生することができます。状態遷移が完了した後、界面状態マシン完全な保全の特定の永続的な状態を達成するために必要。
- イベント。イベントを列挙し、注釈をベースに、これが最も冷酷です。列挙の内容を変更することはできません。それが唯一の可変パラメータのイベントそのようなタイプを意味します。
- 状態遷移イベント用としてインターフェイスを公開するだけで、多くは、強力なへのアクセスを持っていないと言うことができます。
- 非同期タスクの目に見えない内部実装があるので、制御が困難トランザクション境界。
概要SSMの下では、ステートマシンエンジン、部分的にヘビー級のようなビットは、イベントオブジェクトは、それが保証することはできません豊富なことに、トランザクション制御、個人的な理由のレベルを表しています。
Javaの状態モードを参照して、自分のスケジュールを開発する理由は、StateContextと状態を定義しました。各状態は唯一のインシデントサポート、およびビジネス・ロジック対応するイベントの現在の状態を懸念します。以下のような手順
- まず、個人VSCode値下げプラグとの完全な明確な状態と遷移イベント、という状態マップを果たす最初に来ます。
- 一つより多くの状態のビジネステーブルは、状態Aを示す、イベントがビジネスを受信したときに実行されます。
- YYは、設計を完成するために、もう一度実行します。
- 最適化の波は、各状態でのビジネスの違いは、抽象親クラスのステータステンプレートとして状態に言及し、異なるパラメータで実行されています。すべてのイベントの状態をサポートするイベントをサポートするかどうかを各状態が増加次のように、。
経営統合
ここでは、ステートマシンのシェルが完了し、別の問題を発見しました。サービス、一般的にはどのようなビジネスにおけるサービスの状態でどのようなビジネス、2人のイエスとの関係は何ですか。明らかに、サービスの状態は、状態サービスに配置する必要があります。個人的に私は外には、あなたが達成どのように気にしないので、サービスの下で事業の一般的な状態は、入れ子にするべきだと思います。マッパーが0層である場合、サービス層は1であり、状態サービスは0.5層です。この問題が解決された後、トランザクション制御が容易になります。
テストの結果
- 状態機械を使用した後、試験自体及び状態の内容は、テンプレートクラスのメソッドであり、特定のビジネス、に分割されます。テストテスト・ステート・マシンとしてブランチ場合は複雑な、しかし、私は自信を持っていなかった場合は、状態機械の枝は簡単に、枝を排出することができます。あなたが収集したすべての状態遷移ログを入れて喜んでいる場合は、全体の状態遷移過程を可視化することができます。
レビューと概要
- デザインパターンは依然として非常に強いです、詳細を知っている必要がありますが、全体的な文脈ではありません。必要な場合は、[詳細を学びます。
- SSMはちょうど結果を得るために、国家と国家のイベントを入力したい場合があり、私は、使用上の質問があります。実行状態にあるビジネス・ロジックの後、それはまた結合されています。理想的にはそれが緩くSSMから学ぶことであるイベントリスナーを介して、道を結合する必要があります。