Order LineItem Pattern
Für den Aufbau eines Bestellsystem (Order system) habe ich lange Zeit recherchiert, welches das beste Domain Model ist. Ich habe mich gegen die Standardlösung lange gesträubt, musste aber in der letzten Konsequenz doch auf das Standart Order LineItem Pattern zurückgreifen, da ich hier im Domain Model nur den Blick auf eine Bestellung (Order) lege.
Die Benennung der einzelnen Felder habe ich probiert über schema.org zu ermittelt. Warum muss das Rad neu erfinden, wenn es eine Community gibt, die sich um einen Standart kümmert.
[plantuml]
class Order {
String uuid
String orderNumber
String orderDate
String orderPlacedDateTime
String orderStatus
…
}
class LineItem {
Integer lineNumber
…
}
class ProductItem {
String identifier
String name
…
}
class ShippingItem {
String identifier
String carrier
…
}
class Price {
Float price
…
}
class Taxes {
Float rate
…
}
class Discounts {
Float discount
…
}
class Customer {
String firstname
String lastname
String email
…
}
class BillingAddress{
String firstname
String lastname
String street
String houseNumber
…
}
Order –> LineItem
Order –> Customer
Order –> BillingAddress
LineItem –> ProductItem
LineItem –> ShippingItem
LineItem –> Price
Price –> Taxes
Price –> Discounts
[/plantuml]
Warum diese Entscheidung?
Innerhalb einer Bestellung können verschiedene Artikel (Items) enthalten sein. Dies müssen nicht unbedingt physikalische Artikel sein, sondern es können auch Dienstleistungen sein (Versand, Arbeitsstunden, …). Jeder dieser Artikel kann ein eigenes Model enthalten, ist aber im Grundsatz ein Artikel.