30 Eylül 2026 Çarşamba

Type-state Pattern - Phantom Types

Giriş
Type safe Java içindir

Örnek
Şöyle bir kod olsun
sealed interface OrderState
        permits Unpaid, Paid, Shipped {
}
record Unpaid() implements OrderState {}
record Paid() implements OrderState {}
record Shipped() implements OrderState {}

Order şöyle olsun
record Order<S extends OrderState>(
        String id
) {
}

Factory ve transition şöyle olsun
static Order<Unpaid> newOrder(String id) {
    return new Order<>(id);
}

static Order<Paid> pay(Order<Unpaid> order) {
    return new Order<>(order.id());
}

static Order<Shipped> ship(Order<Paid> order) {
    return new Order<>(order.id());
}

Artık API şöyle
Order<Shipped> ship(Order<Paid> order)


Hiç yorum yok:

Yorum Gönder