DDD entity.
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"
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]):
...
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.
Type of the identifier of the entity, which must be hashable.
Shall return the identifier of the entity.
Return entity._ref_()
.