Person.myCurrentStateは変化への反応を中に変更する必要があります。
class Person { @OneToMany List<Action> actionHistory; @ManyToOne Employer employer; private StateEnum myCurrentState = StateEnum.INITIAL_STATE; }
二つのことが真である場合には、このような状況を想像してみてアクション履歴、雇用主などのビジネスルールのセットがあります。「タイプXのアクションがアクションストリームに表示され、現在のステータスがYの場合は、新しいステータスをYに設定します」
Pe rsonは、現在の状態に基づいて子供をブロックし、いくつかの操作を許可する必要があります。たとえば、特定の条件下でEmployerの職位を更新できない場合や、特定の基準を満たすActionを追加できない場合があります。
は当初、私は、私はちょうど検証/ reactionlogicが含まれている人のルーチンを通じて子どもたちへのすべてのアクセスを漏斗にしようと思いました。その結果、監視する必要のある子供の操作回数が多いため、Personオブジェクトが大きくなりすぎてしまいました。 (つまり、ちょうどgetAEmployer()、setNewEmployer()の代わりに、その種のもの、それはまたupdateJobTitleAtEmployer()などのようなものです)
ロジックを子供たちに広げることは、この場合、雇用者(例えば)はその親に数多くの参照を戻さなければならない。また、このようなものに関連するビジネスルールも全面的に散在しています。
この問題の解決方法はありますか?私は、親のクラスの獣医を育てることができ、場合によっては、子供の多くの特定の状態の変化に反応することができる一般的なやり方が欲しいです。
更新: この質問では、「親」と「子」という用語を誤って使用したと思います。私はそれらを次のように使用しています:親は "子で構成された子/親"を持っています。この例では、Personは親クラスになり、クラスのプロパティは子になります。
良い例:
class Employee
{
private Contract contract;
private List<Action> actions;
private EmployeeState currentState = EmployeeState.INITIAL;
}
がcurrentStateのは、変更される場合があります。この場合には想像もし契約の変更で何か(例えば率が上がる場合)。従業員が特定の州にある場合、契約上は特定の事項を設定できないこともあります。 currentStateが変更された場合、Contractプロパティは大きな計算の1つの要素に過ぎません。つまり、 "Contract.hourlyRate> 30の場合、アクションは状態よりもこれらのプロパティを持つAction ..."などのルールによって状態が決定されます。
また、アクションを追加すると、従業員の状態が変更されるか、現在の状態に応じてブロックされる可能性があります。
私はこれらの問題に遭遇している場合、私のモデルに問題がある可能性はありますか?
私はちょうど用語が明確であることを確認したいと思う - あなたがここで "親"と "子"と言うとき、それはデータメンバー( "子"、( '雇用者))が"parent"( 'Person'))? 私は、継承階層の意味で使われている "親"と "子"の聴き取りに慣れているので、私は尋ねます - 'Person'の子は' Person'を拡張するクラスになります。しかし、それはあなたがここで意味するものではないようです。 – QuantumMechanic
ええ、私はこれらの用語を誤解していると思います。この場合、私は親の中にあるクラスを意味するために "子"を使用しています。 (だから、親は「持っている」または「子供とのタイプの関係で構成されている」)。 – user426724
私はあなたの例ではまだ混乱しています。仕事のタイトルは、雇用者/会社ではなく、従業員/個人の財産と考える。仕事のタイトルが人の状態に依存する場合、setJobTitle関数はその状態をチェックするだけです。 – Pace