wiem, że recykling stary wątek, ale to dla mnie nowe :)
Używamy wielu poziomach dla naszych POJOs dla deserializacji JSON (z Jackson). Oto mały przykład (złożony) od JSON możemy wrócić z relaksującego usługi internetowej:
{ success: true, response: {
sales: { item: "123", sales: 3, returns: 1 },
inventory: { item: "567", qty: 100 }
}
}
Kiedyś mieliśmy POJOs skonfigurowane następująco:
public class Json1 {
private boolean success;
private JsonResponse response;
}
public class Json1Response {
private JsonResponseSales sales;
private JsonResponseInventory inventory;
}
public class Json1ResponseSales {
private String item;
private int sales;
private int returned;
}
public class Json1ResponseInventory {
private String item;
private int qty;
}
mamy wiele z tych, z POJO dla każdego żądania usługi sieciowej, które możemy wykonać. Ten układ dał nam kilka nurtujących wątpliwości:
Zauważ, że ten jeden, względnie prosty przykład dał nam cztery pliki klas, aby nadążyć za. Teraz pomnóż to przez 100, a następnie "współczynnik trudności" równy 3, aby uwzględnić fakt, że większość JSON jest dużo bardziej nieprzyjemna. Tysiące plików.
Nazwy pól są ponownie używane w całym miejscu, a ta sama nazwa pola może mieć różną zawartość w zależności od usługi internetowej. (Wyobraź sobie, że ilości może wrócić jako ciągi z jednego serwisu WWW, int od drugiego, a następnie pomnożyć przez 100s.)
Ponieważ te rzeczy są ze sobą powiązane w relacji rodzic/dziecko, zdecydowaliśmy się iść z ten układ zamiast.
public class Json1 {
private boolean success;
private JsonResponse response;
public class Json1Response {
private JsonResponseSales sales;
private JsonResponseInventory inventory;
public class Json1ResponseSales {
private String item;
private int sales;
private int returned;
}
public class Json1ResponseInventory {
private String item;
private int qty;
}
}
}
W tym przypadku, jestem głęboko zagnieżdżone dwa, ale może być ich więcej. Może do czterech głębokości.
Zwykle się zgadzam. –
Proszę zauważyć, że nie uważam tego za anonimowe. Są koniecznym bólem, jeśli potrzebujesz "łatwego" dostępu do zmiennych zewnętrznych. Mimo to uważałbym, że anonimowa klasa w innym jest zapachem kodu. –