Package: ddd-misc
Domain-driven Design MiscПакет предоставляет базовые классы и утилиты для реализации проекта с событийно-ориентированной архитектурой
с использованием набора принципов DDD.КлассыКлассы объектовBaseAggregate- базовый класс для создания агрегата доменаDDDEvent- базовый класс для реализации событий доменаDDDCommand- базовый класс для реализации команд доменаDDDStructure- базовый класс для создания структур данных при описании команд и событийАтрибуты классовDDDEvent,DDDCommandиDDDSturctureзадаются с использованиемField-классов из пакетаdddmisc.fieldsget_message_class- метод получения класса события или команды по его идентификатору из общего регистраget_error_class- метод получения класса исключения домена из общего регистраКласс репозиторийРепозиторий уровень абстракции отвечающий за сохранение и воссоздание состояния агрегата.В пакете репозиторий представлен 2-мя абстрактными классами для синхронной и асинхронной реализации:AbstractSyncRepository- абстрактный класс для реализации синхронного репозиторияAbstractAsyncRepository- абстрактный класс для реализации асинхронного репозиторияа также в пакете реализованы 2 декоратораdddmisc.decorators.getterиdddmisc.decorators.agetterдля
декорирования методов репозитория для получения агрегата из базы данных.UnitOfWorkUnit of work уровень абстракции отвечающий за обеспечения консистентности при сохранении состояния агрегата.
Unit of work является надстройкой над репозиторием.В пакете UnitOfWork представлен 2-мя абстрактными классами для синхронной и асинхронной реализации:AbstractSyncUnitOfWork- абстрактный класс для реализации синхронного UnitOfWorkAbstractAsyncUnitOfWork- абстрактный класс для реализации асинхронного UnitOfWorkMessageBusВ целях абстрагирования и унификации процесса доставки событий и команд до их обработчиков используется
внутрення шина сообщений. Дополнительно внутренняя шина сообщений обеспечивает итеративный процесс доставки событий,
порожденных агрегатом в процессе исполнения обработчиков на предыдущей итерации.В пакете внутрення шина сообщений представлена классами:AsyncMessageBus- реализации шины сообщений для использования в асинхронном кодеSyncMessageBus- реализации шины сообщений для использования в синхронном кодеtoolsThreadLoop- класс реализующий запуск asyncio.EventLoop в отдельном потокеFuture- класс аналогasyncio.Futureдля работы в многопоточном режимеasync_to_sync- функция вызова асинхронной корутины из синхронного кодаThreadLoopThreadLoop()Свойства:loop- EventLoop работающий внутри потокаdone- Флаг завершен ли потокМетоды:def start()- запускает поток блокируя передачу управления до завершения запуска EventLoopdef stop(timeout=None)- останавливает работу потока блокируя перерачу управления до завершения процесса закрытия EventLooptimeout- время ожидания процесса остановкиdef call_thread_safe(coro: t.Callable[..., t.Awaitable], *args, **kwargs)coro- асинхронная функция которая должна быть исполнена во вложенном потоке*args, **kwargs- параметры вызова корутиныFutureFuture()Свойстваdone- Флаг завершенияresult- Результат установленный в классexception- Исключение установленное к классМетоды:def set_result(value)- метод установки результата в классdef set_exception(self, exception)- метод установки исключенияdef wait(*, timeout=None, raise_exception=True)- метод ожидания futuretimeout- время ожидания завершения Futureraise_exception- поднимает исключение в случае если установлено значение вTrueasync_to_syncdef async_to_sync(loop: asyncio.AbstractEventLoop, coro: t.Callable[..., t.Awaitable], *args, **kwargs)loop- EventLoop в котором должна исполниться корутинаcoro- корутина*args, **kwargs- параметры вызова корутиныChangelog0.8.4Fixed behaviour of dump nullable fields0.8.3fix error with dump nullablefields.Structure0.8.2addedregexattribute toStringfield0.8.1fix error withpytzversion0.8.0add packageddd_misc.tools0.7.2change:converthandlermethod ofAsyncMessageBusfrom async function to sync function return awaitable objectchange equals method forDDDMessageobjects0.7.1bugfix:fixpytzdependency conflict0.7.0changes:В классахBaseDDDException,DDDEvent,DDDCommndизменен тип поля__timestamp__cfloatнаdatetimeДля классовAbstractMessagebusдобавлены методыsubscribe,unsubscribeи enum-атрибутSignalTypesдля подписки и отписки на сигналыДля классовDDDEvent,DDDCommndрасширена сигнатура методовloadиloadsне обязательными атрибутамиreferenceиtimestamp0.6.5changes:DDDMessage.__timestamp__now is datetime valueRemove specified dump and load methods from DDDMessageRemove fieldstimestamp,domainandreferencefrom DDDException dump and load methods0.6.4futures:MakeAbstractAsyncUnitOfWork,AbstractSyncUnitOfWorkas Generic classessetengineas optional parameter for sync and async Messagebusfix hinting forregistermethod of sync and async Messagebus0.6.1future:addfiltermethod forgetterandagetterdecorators0.6.0future:Remove external messagebus from package.Remove DDDResponse from package. Now messagebus handle method return object returned from handler.Refactoring messagebus for set specified uow, repository and engine for handler.Add decorators for get methods of repository. Removed abstract method_get_from_storagefrom repository.0.5.4future:Execute events from commit aggregate changes when handler failed after commitParallel exec handlers subscribed to once event in sync messagebus0.5.3bugfix:Make parallel execute event handlers in messagebusChange messagebus log format0.5.2bugfix:Fix error with nullable and default field attributes