Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
47
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@tsubo

Laravel vs Symfony(DDDの場合)

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やっているという方がいましたら、ぜひ、知見をお聞かせください。

参考情報

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

47
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
47
Help us understand the problem. What is going on with this article?