私は、犬オブジェクトのコレクションを持つPersonクラスを持っているとしましょう。この関係は双方向です。私は、これらのオブジェクトで働いていた場合、今コレクションを含むWebアプリドメインオブジェクトにアイテムメソッドが「追加」と「削除」されるべきですか?
public class Person {
private List<Dog> dogs;
// getter and setter for dogs
}
public class Dog {
private Person person;
// getter and setter for person
}
[OK]を、私は犬を追加し、クライアントが直接コレクションで作業しないように、犬を除去するための人のメソッドを持っているでしょう。
public void removeDog(Dog dog) {
dogs.remove(dog);
dog.setPerson(null);
}
public void addDog(Dog dog) {
dog.setPerson(this);
dogs.add(dog);
}
またはこれらの行に沿ったもの。
サービスレイヤでこれらのオブジェクトを操作する際に私の質問があります。私はaddDogを介して人に新しい犬を追加することができ、自動的に新しい犬を持続させる人を単に保存することができます。しかし、removeDogを介して犬を削除し、その人を保存しても、犬を永続ストレージから自動的に削除することはありません。犬の参照をnullに設定するだけです。
は、だから私のようなもので終わる:これはWebアプリケーションで、人と犬がメモリに保持されていないので
Dog dog = dogDAO.getDogById(int id);
dogDAO.remove(dog);
、これは正常に動作し、私はPerson.removeDogと呼ばれることはありません()。この犬を元々参照していた人を次回ロードすると、犬がストレージから取り除かれたため、犬が含まれなくなります。
Person person = personDAO.getPersonById(int id);
Dog dog = new Dog();
dog.setPerson(person);
dogDAO.save(dog);
これもまたうまく動作し、Person.addDog()を呼び出すことはありません。
PersonクラスでaddDogメソッドとremoveDogメソッドを使用することに意味がありますか?