遅まきながらLaravel
を採用したシステムを開発しました。開発を通じて感じた利点・欠点を紹介します。
HTMLとデータのバインディングはクライアント側で行いました。ですので Laravel が備えているBlade
については最小限の機能しか使っていません。
次の点が優れていると思いました。
- 情報が
Symfony
に比べて豊富にある。 - クエリービルダーおよび
Eloquent
のモデルで記述できるクエリーがDQL
に比べて書きやすい。 - 配列をラップした
Collection
のメソッド充実している。 - Eloquent モデルがメモリーを圧迫することに対して対策が用意されている。
- データベーステーブルの生成、テストデータの生成機能が用意されている。これを活用することで開発中の早い段階でバグに気が付くことができた。
次のような点が不便と思いました。
- Eloquent が ActiveRecord であるためドメイン層とデータアクセス層の分離ができない。データアクセス関係のメソッドが静的メソッドになっているのでコンストラクタインジェクションにより生成したDIオブジェクトを利用できない。
- 複合主キーがサポートされない。例えば伝票に紐づく伝票明細テーブルは伝票番号・伝票明細番号の組み合わせで表されるサロゲートキーの他に単独カラムで一意となるサロゲートキーを付けなければならない。
- データベース・ドメイン間の変換をカスタマイズしにくい。埋め込みバリュー(値オブジェクト)に対するサポートが中途半端。(
toArray
メソッドの対応)