99 lines
2.5 KiB
Markdown
99 lines
2.5 KiB
Markdown
# E-Commerce Domain Ontology Example
|
|
|
|
## Overview
|
|
This example demonstrates an ontological documentation approach for a typical e-commerce system.
|
|
|
|
## Core Concepts
|
|
|
|
### Primary Entities
|
|
```
|
|
E-Commerce Domain
|
|
├── Customer Management
|
|
│ ├── Customer
|
|
│ ├── CustomerProfile
|
|
│ └── Address
|
|
├── Product Management
|
|
│ ├── Product
|
|
│ ├── Category
|
|
│ └── ProductVariant
|
|
├── Order Management
|
|
│ ├── Order
|
|
│ ├── OrderLine
|
|
│ └── OrderStatus
|
|
└── Payment Management
|
|
├── Payment
|
|
├── PaymentMethod
|
|
└── PaymentStatus
|
|
```
|
|
|
|
### Key Relationships
|
|
|
|
#### Customer Relationships
|
|
- **Customer** has-a **CustomerProfile**
|
|
- **Customer** has-many **Address**
|
|
- **Customer** places-many **Order**
|
|
- **Customer** has-many **Payment**
|
|
|
|
#### Product Relationships
|
|
- **Product** belongs-to **Category**
|
|
- **Product** has-many **ProductVariant**
|
|
- **ProductVariant** appears-in **OrderLine**
|
|
|
|
#### Order Relationships
|
|
- **Order** contains-many **OrderLine**
|
|
- **Order** has-a **OrderStatus**
|
|
- **Order** has-a **Payment**
|
|
- **OrderLine** references-a **ProductVariant**
|
|
|
|
## Business Rules
|
|
|
|
### Customer Rules
|
|
- Customer must have at least one address
|
|
- Customer profile must include valid email
|
|
- Customer can have multiple shipping addresses
|
|
|
|
### Order Rules
|
|
- Order must have at least one order line
|
|
- Order total must equal sum of order line totals
|
|
- Order status progression is immutable
|
|
|
|
### Payment Rules
|
|
- Payment amount must match order total
|
|
- Payment method must be valid for customer
|
|
- Payment status affects order fulfillment
|
|
|
|
## Implementation Examples
|
|
|
|
### Order Entity Example
|
|
```python
|
|
class Order:
|
|
def __init__(self, customer: Customer):
|
|
self.customer = customer
|
|
self.order_lines: List[OrderLine] = []
|
|
self.status = OrderStatus.PENDING
|
|
self.created_at = datetime.now()
|
|
|
|
def add_product(self, product: ProductVariant, quantity: int):
|
|
# Add business logic for adding products
|
|
pass
|
|
|
|
def calculate_total(self) -> Money:
|
|
# Calculate order total
|
|
pass
|
|
```
|
|
|
|
### Relationship Example
|
|
```python
|
|
# Order -> Customer relationship
|
|
class Order:
|
|
def __init__(self, customer: Customer):
|
|
self.customer_id = customer.id # Reference relationship
|
|
self.customer = customer # Object relationship
|
|
```
|
|
|
|
## Documentation Links
|
|
- [Customer Documentation](customer-concept.md)
|
|
- [Product Documentation](product-concept.md)
|
|
- [Order Documentation](order-concept.md)
|
|
- [Payment Documentation](payment-concept.md)
|