Skip to content

Order domain

A class diagram. Orders, line items, products, customers, addresses, payments and discounts, with a label and cardinalities on every relation.

Orders, line items, products, customers, addresses, payments and discounts, with a label and cardinalities on every relationOrders, line items, products, customers, addresses, payments and discounts, with a label and cardinalities on every relation

Spec

order-domain.json
{
"type": "class",
"theme": "default",
"legend": true,
"classes": [
{
"id": "order",
"label": "Order",
"attributes": [
{"visibility": "-", "text": "id: string"},
{"visibility": "-", "text": "placedAt: Date"}
],
"methods": [{"visibility": "+", "text": "total(): Money"}]
},
{
"id": "item",
"label": "LineItem",
"attributes": [
{"visibility": "-", "text": "quantity: int"},
{"visibility": "+", "text": "price: Money"}
]
},
{
"id": "product",
"label": "Product",
"attributes": [
{"visibility": "-", "text": "sku: string"},
{"visibility": "-", "text": "name: string"}
]
},
{
"id": "customer",
"label": "Customer",
"attributes": [
{"visibility": "-", "text": "name: string"},
{"visibility": "-", "text": "email: string"}
]
},
{
"id": "address",
"label": "Address",
"attributes": [
{"visibility": "-", "text": "street: string"},
{"visibility": "-", "text": "city: string"}
]
},
{
"id": "payment",
"label": "Payment",
"attributes": [{"visibility": "-", "text": "method: string"}]
},
{
"id": "discount",
"label": "Discount",
"attributes": [
{"visibility": "-", "text": "code: string"},
{"visibility": "-", "text": "percentOff: number"}
]
}
],
"relations": [
{
"id": "contains",
"from": "order",
"to": "item",
"kind": "composition",
"from_card": "1",
"to_card": "1..*",
"label": "contains"
},
{
"id": "references",
"from": "item",
"to": "product",
"kind": "association",
"from_card": "*",
"to_card": "1",
"label": "references"
},
{
"id": "places",
"from": "customer",
"to": "order",
"kind": "aggregation",
"from_card": "1",
"to_card": "*",
"label": "places"
},
{
"id": "ships-to",
"from": "customer",
"to": "address",
"kind": "composition",
"from_card": "1",
"to_card": "0..*",
"label": "ships to"
},
{
"id": "settled-by",
"from": "order",
"to": "payment",
"kind": "composition",
"from_card": "1",
"to_card": "1",
"label": "settled by"
},
{
"id": "applies",
"from": "order",
"to": "discount",
"kind": "aggregation",
"from_card": "1",
"to_card": "0..*",
"label": "applies"
}
]
}

Draw it yourself

Terminal window
diago render order-domain.json > order-domain.svg

Open it in the playground to edit it in your browser.