本記事では、ファイルシステムでドメイン駆動設計( domain-driven design, DDD )を実装するときに大事なことというテーマで書きます。
大事なことは、ファイルの場所を管理するレイヤを意識することです。
UnityやWPFでドメイン駆動設計をする場合、ファイルシステムで実装したい場面はあります。
ドメイン駆動設計関連の書籍やネット上には書かれていないことなので、記事にしてみました。
ファイルの場所を管理するレイヤ
↓の記事のアーキテクチャを参考にします。
ファイルの場所を意識するレイヤとしては以下の2つがあります。ファイルによって管理するレイヤが変わります。
- インストラクチャレイヤ
- ユーザーレイヤ
インストラクチャレイヤで意識する
インストラクチャレイヤで意識するのは、デスクトップアプリとしてファイルの場所が決まっている場合です。
- 環境設定ファイル
- ログファイル
- 生成データファイル
などが上げられると思います。
生成ファイル
重要なのは3つ目です。生成データファイルは、ユーザーレイヤでも意識するものになりえます。
インストラクチャレイヤが意識する生成データファイルは、アプリが保存場所を決めているものです。保存場所は、インストラクチャレイヤのリポジトリに事前に設定できます。
保存場所は、ユーザーレイヤが意識してはいけません。
ドメイン駆動設計関連の書籍は、ぼくの知る限り、保存場所をインストラクチャレイヤで意識しています。
ユーザーレイヤで意識する
ユーザーレイヤで意識するのは、ユーザーが動的にファイルの場所を指定する場合です。
- ユーザーが指定したファイル
- 生成ファイル
ユーザーが指定したファイル
1番目は、↓の記事のように、ユーザーがファイルダイアログで開くファイルを選ぶケースです。この場合は、ユーザーレイヤで意識したほうがしっくりきます。
これをインストラクチャレイヤで意識すると、ファイルパスをドメインレイヤに渡すことになります。
ファイルパスは、ファイルシステム固有のものなので、ドメインレイヤで意識してはいけません。
ファイルパスを渡さなくても実装できるかもしれません。が、構成はだいぶややこしくなります。
生成ファイル
2番目について、ユーザーレイヤで意識する生成データファイルは、ユーザーが保存場所を指定するものになります。
- ドメインレイヤで保存データを作成する
- そのデータをユーザーレイヤに渡す
- ユーザーレイヤで保存先を指定し、保存する
このようにすると構造がすっきりします。
まとめ
ファイルシステムでドメイン駆動設計( domain-driven design, DDD )を実装するときに大事なことというテーマで書きました。
大事なことは、ファイルの場所を管理するレイヤを意識することです。
↓の書籍を参考に記事を書きました。
コメント