dddentity
DDD entity.
Usage
from dddentity import Entity, ref
UserId = str
class User(Entity[UserId]):
def __init__(self, id: UserId, name: str) -> None:
self.id = id
self.name = name
def _ref_(self) -> UserId:
return self.id
assert User("0001", "Gilgamesh") == User("0001", "Bilgamesh")
assert ref(User("0002", "Enkidu")) == "0002"
Caveat
Currently eq=False
must be set when using with dataclasses
to prevent to generate __eq__()
method by dataclass.
@dataclass(eq=False)
class User(Entity[UserId]):
...
API
dddentity
Module
Entity[T]
abstract class Entity class.
Classes implementing this class must implement abstract method _ref_()
.
This class is hashable, satisfying the following conditions:
-
entity1 == entity2
iffentity1._ref_() == entity2._ref_()
hash(entity) == hash(entity._ref_())
where entity, entity1, entity2 are entities.
T
type parameter Type of the identifier of the entity, which must be hashable.
_ref_() -> T
abstract method Shall return the identifier of the entity.
ref(entity: Entity[T]) -> T
function Return entity._ref_()
.