使用EventStoreDB实现事件溯源的Python开源项目

22-06-14 banq

这是 Python 事件源库的扩展包, 它为[url=https://github.com/pyeventsourcing/eventsourcing]EventStoreDB[/url]提供了一个持久性模块。它使用esdbclient 包通过其 gRPC 接口与 EventStoreDB 进行通信。

以通常的方式定义聚合和应用。请注意,EventStoreDB中的聚合序列从位置0开始,所以要在你的聚合类上相应地设置INITIAL_VERSION。

from eventsourcing.application import Application
from eventsourcing.domain import Aggregate, event


class TrainingSchool(Application):
    def register(self, name):
        dog = Dog(name)
        self.save(dog)
        return dog.id

    def add_trick(self, dog_id, trick):
        dog = self.repository.get(dog_id)
        dog.add_trick(trick)
        self.save(dog)

    def get_dog(self, dog_id):
        dog = self.repository.get(dog_id)
        return {'name': dog.name, 'tricks': list(dog.tricks)}


class Dog(Aggregate):
    INITIAL_VERSION = 0

    @event('Registered')
    def __init__(self, name):
        self.name = name
        self.tricks = []

    @event('TrickAdded')
    def add_trick(self, trick):
        self.tricks.append(trick)



详细点击标题

猜你喜欢