Closed6
Python x DDD x Clean Architecture 実装例
ピン留めされたアイテム
記事にしたのでクローズする。
Pythonでクリーンアーキテクチャ構造でDDDパターンを実装してみた。
内容をまとめてみて、有益そうなら記事にしてみる。
基底クラス、抽象基底クラス
- 原則
pydantic.BaseModel
を使用 -
pydantic.BaseModel
のカスタムコンフィグとしてBaseConfig
とBaseFrozenConfig
を定義 - Value Objectなど不変なものでは
BaseFrozenConfig
、Entityなど可変なものはBaseConfig
- IFRepositoryやIFQueryServiceなどのインターフェースクラス用に
Interface
クラスを定義(実質ABCと同義)
使用ライブラリ
-
pydantic
とinjector
-
pydantic
はよりオブジェクト指向に実装するために使用 -
injector
はDIするために使用 -
injector
とpydantic.BaseConfig
を組み合わせることによってIoC Containerを実装
外部インターフェース
現状、FastAPIでREST API実装。
外部インターフェースの実装は切り出ししているので、CLIやgRPCにも容易に対応可能。
CQRS
CommandではRepositoryを使用。
Repositoryはドメインオブジェクトを引数に取り、ドメインオブジェクトを返す。
つまり、Repositoryはドメインオブジェクトを境界としてデータの処理を行う。
QueryではQueryServiceを使用。
QueryServiceはInputDataを引数に取り、OutputDataを返す。
つまり、QueryServiceはアプリケーションで使用されるデータを効率的に取得する。
このスクラップは2022/12/19にクローズされました