概要
PHPフレームワーク Laravel Webアプリケーション開発のChapter3が完了したので学んだことを記録する。
実装パターン
トランザクションスクリプトパターン
ビジネスロジックの処理をまとめたもので処理に関するものを1つのクラスにまとめたもの (1つのクラスに対し全ての実装を記述するパターン)
シンプルなパターンであるが、様々な処理が増え共通化が困難になることから、クラスでの運用・保守が難しく設計の一貫性を失い実装内容の把握がより困難になってしまう。
レイアードアーキテクチャーを導入することで解決することができる
ドメインモデルパターン
ドメイン駆動設計を取り入れて実装コードに反映させるパターンのこと。
概念整理や分析などを開発の中心におく考え方。
ソフトウェアアーキテクチャー
MVCパターン
すでに行なったことあるパターンのため省略
ADRパターン
ソフトウェアアーキテクチャーの1つであり、MVCと異なり1つのアクションに対しそのリクエストからレスポンスを定義する必要がある。
これは、MVCパターンで発生するコントローラやモデルの肥大化を解消するためや、保守性可読性テストコードの書きやすさから使われる。
ADRはAction、domain、Responderで構成されており、MVCと比較するとActionがcontroller、domainがmodel、ResponderがViewの対応をしている。
ドメインとモデルの違いは特になく、レスポンダはコンテンツ情報だけでなくHTTPレスポンスを構築する処理も担当する。
アーキテクチャー設計
アーキテクチャー設計では、開発メンバーの人数や開発期間といった様々な要素から現実的な妥協点を見出し適切に設計する必要がある。
機能要件や非機能要件(スケーラビリティ、セキュリティなどといった機能以外の要件のこと)を満たすための拡張性や保守性を保つには適切な設計に基づく抽象化と構造化が必要になる
→ MVCやADRパターンをベースにビジネスロジックからデータベース操作を分離した設計を行うことが重要になる。
レイヤードアーキテクチャ
システムを一連の論理的なレイヤーに編成するソフトウェア設計パターンのこと。
それぞれのレイヤーに対し、システム全体の中で特定の責任と役割を持っている。
ビジネスロジックの複雑化を防ぎ、抽象化することで依存を排除することができテストの容易さや仕様変更の対応のしやすさなどに役立てることができる。
主な実装方法としては、リポジトリ層でDBを操作し、サービス層からデータベース操作を分離させる。
そのため、レイアの分離としては以下のようになる。
コントローラ → サービスレイア → リポジトリレイア → モデル