67
51

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Laravel vs Symfony(DDDの場合)

Last updated at Posted at 2019-07-13

PHP で DDD(ドメイン駆動設計)をする案件でウェブフレームワークの選定を行いました。

フレームワーク選定にあたり、以下の方針を立てました。

  • 実績のあるフレームワークから選定(Laravel か Symfony の2択としました)
  • DDD が提唱している不変条件をモデルに実装出来ること
  • フレームワークと戦わない(目的達成の為に Hack 等の小細工をしない)
  • 人がレビュー等で注意するといった回避策で妥協しない
  • なるべくシンプルにフレームワークを使う

本来、フレームワークはドメイン層に関心がなく DDD に制約を与えないはずです。
一方で DDD はドメイン層以外には具体的な実装方法を提示していません。
DDD をやるのにどのフレームワークを使ってもいいのでは?と思うのですが、実際にはそうではありませんでした。

フレームワークが採用している ORM によって DDD しやすいものと困難なものがあります。

FW ORM パターン 調査結果
Laravel Eloquant Active Record 設定が無く簡単
モデルで constructor や public, private といったアクセス修飾子が自由に使えない
モデルに不変条件の実装ができずDDDに不向き
Symfony Doctrine Data Mapper DBのテーブルカラムとモデル属性のマッピング設定が必要
モデルで constructor や public, private といったアクセス修飾子が自由に使える
モデルに不変条件の実装ができてDDDに向いている

上記表の結果から PHP での DDD 案件では Symfony を採用することに決定しました。

我々は Laravel をとても気に入っていたので、なかなか Laravel をあきらめる気にはなれませんでした。しかし、色々と調べたのですが良い方法は見つかりませんでした。Active Record でもうまくDDDやっているという方がいましたら、ぜひ、知見をお聞かせください。

参考情報

モデルでドメイン知識を表現するとは何か・・・不変条件について、とても分かりやすい記事です

67
51
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
67
51

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?