Skip to main content

DDD entity

Project description

dddentity

PyPI PyPI - Python Version Code style: black license

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

Module dddentity

abstract class Entity[T]

Entity class. Classes implementing this class must implement abstract method _ref_().

This class is hashable, satisfying the following conditions:

  • entity1 == entity2 iff entity1._ref_() == entity2._ref_()
  • hash(entity) == hash(entity._ref_())

where entity, entity1, entity2 are entities.

type parameter T

Type of the identifier of the entity, which must be hashable.

abstract method _ref_() -> T

Shall return the identifier of the entity.

function ref(entity: Entity[T]) -> T

Return entity._ref_().

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

dddentity-0.1.0.tar.gz (3.1 kB view hashes)

Uploaded Source

Built Distribution

dddentity-0.1.0-py3-none-any.whl (3.3 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page