技術駆動パッケージングとstrict layered
一般的な用語かどうか分からないけど、DDDなどの構造に関する方式メモ。
「技術駆動パッケージング」
DDDをいざやろうとして、実際にファイルをどこに置くの?どういうカテゴリーでディレクトリにまとめるの?という疑問への回答。
これはアンチパターン派が多そう。
右(2枚目)は「技術駆動パッケージング」というアンチパターン。設計パターンごとにまとめるのは一見綺麗に整頓されているように見えるが、ドメインの関心事が設計パターンで分断されてしまい、業務概念ごとにまとまるべきものが低凝集になってしまう。特にマイクロサービス化を試みる場合非常に困る。 https://t.co/ixXh8X0DB1
— ミノ駆動 (@MinoDriven) 2019年7月10日
ただ、この図を見ると、コントローラーも同じディレクトリにまとめてしまった方が分かりやすくない?と思うのだけれど。
コントローラーやDBアクセス(リポジトリの実装クラス)ごと一つの機能の構成単位としてディレクトリにまとめてしまっても良いような。設計が綺麗じゃない感じがするけど、フレームワークもDBも変更しない前提なら特にデメリットは無いような気がする。
「strict layered と relaxed layered」
レイヤーを飛び越えてアクセスしても良いかどうか。
これはそれぞれ自分で選んでねということらしい。
詰め替えのコードが少ない手間で書けるのなら全部詰め替えた方が良いんだろうけど、増えてくると結構な手間がかかりそう。言語による?