J'ai mis en œuvre quelques applications Java, mais seulement des applications de bureau jusqu'à présent. Je préfère utiliser des objets immuables pour faire circuler les données dans l'application plutôt que d'utiliser des objets avec des mutateurs (setters). et getters ), également appelés JavaBeans.
Mais dans le monde Java, il semble être beaucoup plus courant d'utiliser des JavaBeans, et je ne comprends pas pourquoi je devrais les utiliser à la place. Personnellement, le code semble meilleur s'il ne traite que des objets immuables au lieu de muter l'état tout le temps.
Les objets immuables sont également recommandés dans Point 15 : minimiser la mutabilité , Java efficace 2ed .
Si j'ai un objet Person
mis en œuvre en tant que JavaBean ça ressemblerait à ça :
public class Person {
private String name;
private Place birthPlace;
public Person() {}
public setName(String name) {
this.name = name;
}
public setBirthPlace(Place birthPlace) {
this.birthPlace = birthPlace;
}
public String getName() {
return name;
}
public Place getBirthPlace() {
return birthPlace;
}
}
Et la même Person
mis en œuvre en tant que immuable objet :
public class Person {
private final String name;
private final Place birthPlace;
public Person(String name, Place birthPlace) {
this.name = name;
this.birthPlace = birthPlace;
}
public String getName() {
return name;
}
public Place getBirthPlace() {
return birthPlace;
}
}
Ou plus proche d'un struct
en C :
public class Person {
public final String name;
public final Place birthPlace;
public Person(String name, Place birthPlace) {
this.name = name;
this.birthPlace = birthPlace;
}
}
Je pourrais aussi avoir des getters dans l'objet immuable pour cacher les détails de l'implémentation. Mais comme je ne l'utilise que comme un struct
Je préfère éviter les "getters" et rester simple.
Simplement, je ne comprends pas pourquoi il est préférable d'utiliser les JavaBeans, ou si je peux et dois continuer avec mes POJO immuables ?
De nombreuses bibliothèques Java semblent avoir un meilleur support pour les JavaBeans, mais peut-être qu'un meilleur support pour les POJO immuables devient plus populaire avec le temps ?
1 votes
Je pense que vous voulez dire Point 15 : minimiser la mutabilité et non *Minimiser l'immutabilité".
0 votes
@matt : Merci =) Je l'ai mis à jour maintenant.
7 votes
Votre approche de l'immuabilité est excellente, elle vous évite de nombreux problèmes de threads. +1
1 votes
Vous aurez besoin d'un constructeur par défaut si vous utilisez JPA