Domain-Driven Design base classes and contracts
Project description
Python‑DDD‑Infrastructure
A lightweight Python library offering building blocks for Domain‑Driven Design (DDD). Provides base classes and utility mixins to help structure your domain model cleanly in terms of entities, value objects, aggregates, and events.
✨ Features
-
Core DDD abstractions:
ValueObject— immutable objects compared by value.Entity— objects with a unique identity.AggregateRoot— consistency boundary for aggregates.DomainEvent— support for domain events in an event‑driven or event‑sourced architecture.
-
Clean, minimal dependencies and a small surface area so you can integrate it with your existing projects without a heavy footprint.
📦 Installation
Install from source:
pip install git+https://github.com/ariana126/Python‑DDD‑Infrastructure.git
or PyPI
pip install dddx
🛠 Usage
Here’s a simple example of how you might use the components in your domain layer.
from ddd import ValueObject, Entity, AggregateRoot, DomainEvent
# Value Object Example
class Money(ValueObject):
def __init__(self, amount: float, currency: str):
self._amount = amount
self._currency = currency
@property
def amount(self):
return self._amount
@property
def currency(self):
return self._currency
# Entity Example
class Product(Entity):
def __init__(self, product_id: str, name: str, price: Money):
super().__init__(entity_id=product_id)
self._name = name
self._price = price
@property
def name(self):
return self._name
@property
def price(self):
return self._price
# AggregateRoot + DomainEvent Example
class ProductCreated(DomainEvent):
def __init__(self, product_id: str, name: str, price: Money):
self.product_id = product_id
self.name = name
self.price = price
class Inventory(AggregateRoot):
def __init__(self, inventory_id: str):
super().__init__(aggregate_id=inventory_id)
self._products = {}
def add_product(self, product: Product):
# Some business invariants could be checked here
self._products[product.id] = product
self.record_event(ProductCreated(product.id, product.name, product.price))
✅ Testing
This project uses pytest for unit tests.
To run tests:
pytest
🌐 Contribution
Contributions are very welcome! If you find bugs, have ideas for enhancements, or want to add features, please feel free to open an issue or a pull request. Some suggestions:
- Add more domain values (e.g. price, currency)
- Support serialization / deserialization of aggregates and events
- Expand documentation, provide practical real‑world examples
📄 License
This project is released under the MIT License. See the LICENSE file for details.
🤝 Acknowledgments
Thanks to anyone who has contributed or will contribute. Built for folks who want to work cleanly with DDD in Python, without getting locked into large frameworks.
Built with care by the community, for domain experts and software designers.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dddx-0.3.0.tar.gz.
File metadata
- Download URL: dddx-0.3.0.tar.gz
- Upload date:
- Size: 6.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6388947e995bb3def9fcdc00e750070ab59182bc6ae9bd177f416e6239f50f8f
|
|
| MD5 |
460ca4324d584865b88107dab588529f
|
|
| BLAKE2b-256 |
dd29812509d57e48965a84ee298dd97f478a1673deb0696d3b389ad51bcd90f2
|
File details
Details for the file dddx-0.3.0-py3-none-any.whl.
File metadata
- Download URL: dddx-0.3.0-py3-none-any.whl
- Upload date:
- Size: 6.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66c6c451ce306b7b7a9ce9b5d2954fe2fca2aa1e9c369f4423236b884c119ff6
|
|
| MD5 |
8f76ced9a314c8fa153b4de8b2a3ad3b
|
|
| BLAKE2b-256 |
dc63d0da3393e5bc3432c092e5e44ecf8ae0662c463413a2b62ef45afc34a9aa
|