私はSpringを使用しています。Updaterepo.findById(id)
の場合、現在のインスタンスを取得するために呼び出し、その後model.setXXX()
フィールドを更新するために呼び出し、最後にrepo.save(mdl)
それを保存します。削除の場合は を呼び出しますrepo.remove(id)
。現在、更新と削除の両方が状態駆動型であり、モデルの状態が変化する可能性があり、状態に基づいて、削除などの特定のアクションが許可されない場合があります。このロジックが本質的にドメイン モデル内にあり、リポジトリの実装に漏れないように、これらの動作を実装するにはどうすればよいですか?
質問する
288 次
1 に答える
1
私はこのようなことをします:
// entity
class User{
...
bool CanBeArchived(){
// check whether objects can be archived based
// on the rules and state that you mention
}
...
}
// repository
interface UserArchiver{
// implementation calls 'CanBeArchived' and throws if it fails
void Archive(User user)
}
上記のアプローチが気に入らないようです。
... ロジックは基本的にドメイン モデル内にあり、リポジトリの実装に漏れません。
リポジトリの実装にドメインが漏れることを心配する必要はないと思います。いずれにせよ、これは避けられません。データ アクセス レイヤー (レポの実装) はドメイン オブジェクトの詳細な知識を持っています。心配する必要があるのは、逆の「ドメインへのデータ アクセス リーク」であり、これは上記のコードでは発生していません。
于 2012-08-14T18:29:48.620 に答える