2009-05-18 7 views
0

私はファーマークラスを持っていて、ファーマーはブタのコレクションを持っているとしましょう。コレクションを含むORMクラス。子供よりも親クラスに焦点を当てようとしている

私はHibernateのようなORMを使用している場合は、私は私のコントローラからこのような何かを行うことができますよう、ファーマーズ豚のコレクションへの更新をカスケード接続することができます

Pig pig = new Pig("Charlie"); 
farmer.addPig(pig); 
farmerService.save(farmer); 

マイ農家のサービスはについては何も知りません豚。アプリケーションの要件に応じて、私は豚DAOがまったく必要ないかもしれません。私は農民にしか関心がありません。

涼しいですが、豚がベーコンに変わるとどうなりますか?

farmer.removePig(pig); 
farmerService.save(farmer); 

ここでの問題は、ステートレスなWebアプリケーションで私はファーマーズremovePigメソッドに渡すつもりだ豚を作成するためのいくつかの方法が必要だということです。

私が行うことができます:

// manual search Farmer's collection - requires loading all pigs. 
// Yes, I could just pass id to removePig, but it confuses the example 
pig = farmer.getPigById(id); 
farmer.removePig(pig); 
farmerService.save(farmer); 

または

// loads up a pig, and hopefully it belongs to the farmer 
pig = farmerService.getPigById(id); 
farmer.removePig(pig); 
farmerService.save(farmer); 

後者が良さそうですが、私は私のfarmerServiceにgetPigById()メソッドを追加するつもりならば、私もかもしれないだけsavePig()メソッドがあります。これは農業者から豚への焦点を変えるだろう。

pig = farmerService.getPigById(id); 
farmerService.removePig(pig); 

ああ、さらにコードが小さくて見てください。しかし、それは個々のブタではなく、ファーマーとそのブタのコレクションで作業したいという論理的な見解に違反しています。私はもはや農業従事者から豚を明示的に取り除くことはしていないが、それはすべて暗黙的かつ逆方向である。

私は多くのこの問題に遭遇しているようです。注目すべきクラスはファーマーです。豚は二次的です。しかし、ブタの集まりと一緒に働くのは難しいです。スロープを下げずに、個々のブタで働くことができます。ブタが持続性からリロードされたときにその変化が反映されます。

この点について私にどのようなアドバイスを提供できますか?

答えて

1

シナリオでは、私は第2のアプローチに傾く傾向があります。あなたが状態がより少ない環境にいるという事実は、特定のhttp要求であなたの状態を復元する方法でのみ、あなたのオブジェクトモデルに反映されるべきではありません。これはここで行われます:

pig = farmerService.getPigById(id); 

このコードは、コントローラ内で発生する必要があります(MVCまたはMVPパターン内)。

farmer.removePig(pig); 
farmerService.save(farmer); 

現在のリクエストを処理している特定のコントローラが検討されている現在の豚のこの状態を維持するための責任を負わなければならない:あなたは、通常と同じように、コードの残りの部分は継続します。これは、ブラウザにブタのIDを送信する責任があり、このブタのIDをブタのオブジェクトに変換する責任があります。それはそれ自身の方法ですが、農民サービスへの呼び出しを使用することが最も理にかなっています。ここからは、一般的なIDからオブジェクトへの呼び出し(またはその逆)を行うことによって、この変換をさらに自動化できます。

このドメインモデルは農家に焦点を当てるべきだと思うのは間違いなく、ドメイン駆動型デザインでインラインになります。この場合のFarmerクラスは、ブタの集まりであり、したがって、ブタのセットの周りの境界を定義します。すべての豚のアクセスは農家を経由する必要があります。このようにして、豚がどのように創造され、破壊され、改変されるかについて明確な契約ができます。したがって、あなたの最後のアプローチは以前と同じくらい健全ではありません。

+0

これは私にとって大きな意味を持っています。ありがとう! – Boden

関連する問題