Zaimplementowałem kilka aplikacji Java, jak dotąd tylko aplikacje desktopowe. Wolę używać niezmiennych obiektów do przekazywania danych w aplikacji zamiast używać obiektów z mutatorami (ustawiającymi i pobierającymi ), zwanymi również JavaBeans.
Ale w świecie Javy wydaje się, że znacznie częściej używa się JavaBeans i nie rozumiem, dlaczego powinienem ich używać. Osobiście kod wygląda lepiej, jeśli zajmuje się tylko niezmiennymi obiektami, zamiast stale mutować stan.
Niezmienne obiekty są również zalecane w pozycji 15: Minimalizuj zmienność , Efektywna Java 2ed .
Gdybym miał obiekt Person
zaimplementowany jako JavaBean , wyglądałoby to tak:
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;
}
}
I to samo Person
zaimplementowane jako niezmienny obiekt:
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;
}
}
Lub bliżej litery struct
C:
public class Person {
public final String name;
public final Place birthPlace;
public Person(String name, Place birthPlace) {
this.name = name;
this.birthPlace = birthPlace;
}
}
Mogłem również mieć metody pobierające w niezmiennym obiekcie, aby ukryć szczegóły implementacji. Ale ponieważ używam go tylko jako struct
, wolę pominąć „pobierające” i zachować prostotę.
Po prostu nie rozumiem, dlaczego lepiej jest używać JavaBeans, lub czy mogę i powinienem kontynuować korzystanie z moich niezmiennych POJO?
Wydaje się, że wiele bibliotek Java ma lepszą obsługę JavaBeans, ale może z czasem popularniejsze staje się większe wsparcie dla niezmiennych POJO?