2012-01-05 5 views
1

多くの依存オブジェクトの削除をトリガーとして、オブジェクトの削除を設計する最良の方法を知りたいと思います。多くの依存オブジェクトを持つオブジェクトを削除するためのOOP設計

ここは例です。 Employerクラスがあります。雇用者が削除されると、そのすべてのジョブ、請求書が削除されます。ジョブが削除されると、カテゴリ選択も削除されます。等々。だから、あなたが削除することがわかるように、もっと多くのオブジェクトでEmployerが削除をトリガーします。問題は、従属オブジェクトの削除に必要な多くの引数をEmployerクラスのdeleteメソッドに渡す必要があることです。

ここでは簡単な例を示します。メインクラスを想像してみてください。メインオブジェクトが削除されると、オブジェクトDep1、Dep2も削除する必要があります。 Dep1が削除されると、Dep11も削除する必要があります。削除メソッドがDep1.delete(arg1)、Dep2.delete(arg2)、Dep11.delete(arg3)の場合、Mainのdeleteメソッドは次のようになります:Main.delete(arg1、arg2、arg3) 。分かりますか?多くのオブジェクトはメインに依存しています - 削除のためにはもっと多くの引数が必要です。

私はデータベースからの削除、つまり「ビジネスロジック」の意味での削除に興味があることを指摘しておきます。私はdeleteメソッドで "deleted"オブジェクトの設定を解除していません。私が検討しているどのようなオプション

:別のオブジェクトに削除のために必要な引数をグループ化

  • 。私はこれらの議論がどのようにグループ分けされるのか分かりません。彼らは単に一緒に属しません。たとえば、Invoice_searcherとJob_searcherが必要な場合、なぜそれらは1つのオブジェクトにまとめられますか?それはどんな物体ですか?
  • Employerクラスのdeleteメソッドから従属オブジェクトの削除を移動します。この場合、明示的に子のdeleteメソッドを呼び出さないと、システムは矛盾した状態になります。私はそれを避けたいと思います。一度uはあまり参考に自動的になり、従業員の参照が少なく、他の作るような方法で組成物を用いることが
+0

あなたの質問にお答えして申し訳ありませんが、Udi Dahanは「削除」という言葉の優れたブログを投稿しました:http://www.udidahan.com/2009/09/01/dont-delete-just-dont/ – Kane

+0

That's興味深い見解ですが、私の問題を解決せず、「削除しない」ことについて議論することは、この質問の文脈から外れています。 –

+2

依存オブジェクトの削除にはどのような引数が必要ですか? 'object.deleteYourself()'は他の入力を必要としないはずのかなり簡単な指示のようです。 – MrMisterMan

答えて

1

削除関数にパラメータを渡している場合は間違いがあります。

オブジェクトは、どのあなたの削除機能は、それがの親である他のオブジェクトを識別することができるはず呼び出します。

私はオブジェクトを強調しています。なぜなら、これはリレーショナルの観点から来るように思えるからです。

+0

これは状況に対する正しい答えと思われます。MrMisterManは彼のコメントで同じことを提案した。 –

0

てみてください....

他の方法があれば、ネストされたクラスの助けを取ることです他のクラスで入れ子クラス(内部クラス)の参照を引き出していないことを確認してください)。

+0

おそらく、問題はデータベースから、つまりビジネスロジックドメインからオブジェクトを削除することであり、オブジェクト自体を設定解除しないことです。 –

0

私の中で最もカプセル化されたクラスは を参照していない他のものも自動的に非参照になります。作業の流れ私は削除するコードを書く必要がないので、塩の穀物で私の助言を取る。これらのオブジェクト/レコードがどのように作成されているかを見て、同じ方法で削除を処理すると役立ちます。たとえば、ロジックを作成することは、このようであれば:

  1. は多分削除ロジックは次のようになります。より雇用

と請求書

  • 准請求書を作成して雇用
  • を作成します。
    1. 雇用主との請求書の関連付けを削除する
    2. 請求書(複数可)
    3. 削除雇用

    削除限りエンティティは一貫した方法で作成されているように、逆の順序でそれらを削除することも、一貫性であることを証明する必要があります。

  • +0

    問題は、雇用主は請求書なしで作成でき、請求書はいつでも個別に作成され、雇用者オブジェクトからは作成されないことです。 しかし、削除は雇用主から行わなければなりません。 削除の仕方はわかっています。ここでの問題は、メインの親(雇用者)に依存するエンティティの削除に関する引数が多すぎる –

    +0

    請求書がEmployerオブジェクトとは独立して作成されている場合、Employerオブジェクトとは独立して削除しないでください。私は、雇用主が削除に責任を負う必要があると考えていますが、私が通常遭遇するものとは違う請求書(およびその他の児童)を作成するためではありません。しかし、その要件が本当に必要条件であるならば、私は、(すべての引数を渡すことによって)どのオブジェクトを削除する必要があるかを雇用主に伝えること以外には何もできないと思います。 –

    +0

    雇用者と請求書を別々に削除すると(異なる方法を使用して)、システムが矛盾した状態になる可能性があります(雇用主に属していない請求書) –