Closed6

Python x DDD x Clean Architecture 実装例

KoeiKKoeiK

基底クラス、抽象基底クラス

  • 原則pydantic.BaseModelを使用
  • pydantic.BaseModelのカスタムコンフィグとしてBaseConfigBaseFrozenConfigを定義
  • Value Objectなど不変なものではBaseFrozenConfig、Entityなど可変なものはBaseConfig
  • IFRepositoryやIFQueryServiceなどのインターフェースクラス用にInterfaceクラスを定義(実質ABCと同義)
KoeiKKoeiK

使用ライブラリ

  • pydanticinjector
  • pydanticはよりオブジェクト指向に実装するために使用
  • injectorはDIするために使用
  • injectorpydantic.BaseConfigを組み合わせることによってIoC Containerを実装
KoeiKKoeiK

外部インターフェース

現状、FastAPIでREST API実装。
外部インターフェースの実装は切り出ししているので、CLIやgRPCにも容易に対応可能。

KoeiKKoeiK

CQRS

CommandではRepositoryを使用。
Repositoryはドメインオブジェクトを引数に取り、ドメインオブジェクトを返す。
つまり、Repositoryはドメインオブジェクトを境界としてデータの処理を行う。

QueryではQueryServiceを使用。
QueryServiceはInputDataを引数に取り、OutputDataを返す。
つまり、QueryServiceはアプリケーションで使用されるデータを効率的に取得する。

このスクラップは2022/12/19にクローズされました