Disons que j'ai une classe Person qui a une collection d'objets Dog. La relation est bidirectionnelle.Les objets de domaine d'application Web contenant des collections doivent-ils avoir des méthodes d'élément "ajouter" et "supprimer"?
public class Person {
private List<Dog> dogs;
// getter and setter for dogs
}
public class Dog {
private Person person;
// getter and setter for person
}
Ok maintenant, si je viens de travailler avec ces objets, j'avoir des méthodes en personne pour ajouter un chien et la suppression d'un chien, de sorte que le client ne fonctionne pas directement avec la collection.
public void removeDog(Dog dog) {
dogs.remove(dog);
dog.setPerson(null);
}
public void addDog(Dog dog) {
dog.setPerson(this);
dogs.add(dog);
}
ou quelque chose dans le même sens.
Ma question vient lorsque vous travaillez avec ces objets dans la couche de service. Je peux ajouter un nouveau chien à une personne via addDog et simplement enregistrer la personne qui persistera automatiquement le nouveau chien. Cependant, enlever un chien via removeDog puis enregistrer la personne ne supprimera pas automatiquement le chien du stockage persistant ... il va juste mettre la référence du chien à null.
donc je me retrouve avec quelque chose comme:
Dog dog = dogDAO.getDogById(int id);
dogDAO.remove(dog);
Parce que c'est une application web et des personnes et les chiens ne sont pas conservées dans la mémoire, cela fonctionne très bien, et je jamais appelé Person.removeDog(). La prochaine fois que je chargerai la personne qui a initialement référé ce chien, elle ne contiendra pas le chien parce qu'il a été retiré du stockage. La même chose peut demander d'ajouter un chien:
Person person = personDAO.getPersonById(int id);
Dog dog = new Dog();
dog.setPerson(person);
dogDAO.save(dog);
Encore une fois cela fonctionne très bien même et je jamais appelé Person.addDog().
Y a-t-il un quelconque intérêt à avoir les méthodes addDog et removeDog dans ma classe Person?