質問

の開発をしてい販売促進システムおよびんを踏んだも何度か取り上げているもの取り扱い状態機械のパターンがないの経験状態機械ていない。(粉を山にして真ん中をテートマシンでは全然できなこの状況:) い販売促進が期間、一部割り当て、お客様の製品の割引等各推進もしています。が約5です。間の遷移状態を厳密に確定できな変化状態1状態3直接ユーザーに変更して状態の2つです。をご利用ください制限のように"できな商品の場合は推進状態3-5".または制限のように"のみスーパーユーザーが編集できる推進費している状態3-5".

かについて http://www.codeplex.com/SimpleStateMachine が、なんなのかってなければなり複雑なります。いを取り扱うことができる状態の理論に私のサービス層を用い:

if (promotion.state == statesRepository.GetState3() && false == loggedUser.IsInRole("superUser")){
   throw new PromotionStateException("user not allowed to edit promotion in this status");
}
...

または

public void ChangePromotionStatus(promotion, newStatus){
  if (promotion.Status == status1 && newStatus != statesRepo.GetState2()){
    throw new StateTransitionException("unable to change from status 1 to " + newStatus);
  }
}

んがこのようなコードできることはあるとより良いアプローチなんて相談すればいいのだろうか。私は別の懸念もちろん、サービスの開発などPromotionStatusChangeReviewService,PromotionEditPermissionServiceなどのコードを以下結合があるのだろうか、よりよい解決方法が見えないことに気づいたのが現状です。

役に立ちましたか?

解決

五つの国でしかできない複雑なものにな状態で機械がうまくつかの問題点によるとして生まれ変わろうとしている少数の推移を取り扱う特別に明確にした。こちらはいくつかのヒント:

  • 状態機械んでもない限り、できるラベルを有意義にする。"状況3"とは何;必要なので何かと便利な"推進"、"アクティブ"、"完了"、など。

  • 一部のマシンパターンを想定してい離れ業を理解し、どのように遷移します。ないと思いますが、方法などに ChangePromotionStatus() おとえば、インスタンスが吹き出してく場合には許すべきでない。の状態で機械うのを防止遷移することになる。

  • 場合これらの遷移は小さいものの基礎研究が実際に製品化されることは、あってはならないことでラベルして、私のもおすすめの命名に遷移します。これは特になければならないときに便利での推移をすべて同じことが多少異なります。

他のヒント

ジョンは頭の上に釘を打つ - あなたのプロセスをしたい、あなたのドメインエンティティから分離されるように、ステートマシンを使用してモデル化。あなたのドメインエンティティは、おそらく特定のイベントに基づいて状態から状態への移行の仕事を管理するであろう、彼らはステートマシンで使用されていることを直接的な知識を持つべきではありませんが、彼らは<全角> の意志のビジネスを理解します彼らはであり、そしてそれらの状態に関連するビジネスルールを適用または適用することができます。

各状態の意味

理想的には、ステートマシンによって管理されているために適切なドメインエンティティは、ステートマシンの状態として動作する状態のいくつかの種類がありますし、時期を決定するために、状態マシンで使用可能なイベントが発生します移行が適切です。

それはあなたの状態であることを確かに真実であるならば、

ただし、の完全のシーケンシャル - 彼らは常にABCDEまたは前後に正確に一つのステップに行く、つまり、私は、ステートマシンは意味を成さないかわからないので、そこにしかし、現実の世界が処理することはほとんど厳密に線形ではない - あなただけ前後に行くことができますので、任意の注文で十分です次/前のロジックと結合された(たとえば、列挙型など)状態のリストは - 次の状態を選択するために必要な特別な状況ではありません彼らは一見にあるように見える場合でもます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top