Hej, załóżmy, że mamy sobie obiekt Zamówienie i posiada on kilka różnych stanów - CREATED, PAID, CANCELED, SENT, CONFIRMED itd.
Standardowym podręcznikowym zamodelowaniem jest zrobienie sobie encji Order i enuma z tymi wartościami. Wtedy w większości metod biznesowych mamy ifa/switcha na te stany i robimy odpowiednią logiką. Dużo też rzucamy IllegalStateException z racji tego, że np z CREATED nie przejdziemy do CONFIRMED.
Jakie macie lepsze podejście do tego tematu?
Być może zamiast obiektu Order mieć obiekty CreatedOrder, PaidOrder, CanceledOrder itd?
Wtedy np CreatedOrder ma metodę pay(), która produkuje obiekt PaidOrder, który normalnie potem persystujemy.
Dzięki temu pozbywamy się ifologii na statusy zamówienia, bo każdy ma metody zdefiniowane pod siebie. Minus taki, że musimy mieć tabelkę per kazda z tych klas.