PHPStanのextensionでnamespace・class名の依存関係チェックする
前に書いた記事
DDDのさわりをやろうとした - ログ日記
ここで作ろうと思っていた拡張を作った。
サンプル。
https://github.com/nishimura/phpstan-namespace-dependency-sample
実際に作ってみると、各レイヤーごとの依存関係の認識が曖昧なことに気が付いた。
DomainはApplicationServceで生成するけど、生成したDomainのオブジェクトをそのまま返却しても良い?
ドメインのオブジェクトをそのまま返却してしまうと、Presentation層などでドメインの複雑な操作をしてしまえるので、Dtoに詰め替えてApplicationServiceResponse的なオブジェクトを返却すべきだった?
Javaなら例外を各層ごとにわざわざcatchして詰め替えてthrowするのが普通に見られるけど、PHPだとそこまではしないよね?
MVCのモデルをビューにそのまま渡して良い?簡略化したMVC2的なものは、ViewがModelに依存してしまっているよね?Modelのメソッドが変わったらViewに変更が必要だよね?
テンプレートで$entity->save() とかできるオブジェクトを扱うべきではないよね?
とか。
まあPHPだしそこまで細かくインターフェースを分離しなくていいかと思ってたことが色々とあぶり出された。
もっとちゃんと設計している人はこの辺をうまく整理して実装しているんだろうね。
自分は、最初は気を付けていてもいつの間にか忘れてメインのロジックが詰まったオブジェクトをテンプレートに渡したりしていた。
ある程度の規模までとかあまり複雑でない処理ならそっちの方が早いから、問題になることもなかった。
そんな省略したCRUDを早く作るための書き方に慣れている人でも、強制的にDDDできるツールになった。(のかどうかはこれから時間ができたら試す)