データベースに情報を保持するための複数の構成を見てきました。一般的に、私の世界では3つのタイプのデザインが一般的です。
- コントローラーが永続性を管理します
- モデルは永続性を管理します
- サードパーティのライブラリが永続性を管理します。通常、モデルに何らかの種類の注釈が必要です。
概念的に、MVCアーキテクチャと最も互換性があり、互換性のある構成はどれか(もしあれば)疑問に思っていますか?
(リストにない場合は、回答の一部として簡単な概要/概要を教えてください)
データベースに情報を保持するための複数の構成を見てきました。一般的に、私の世界では3つのタイプのデザインが一般的です。
概念的に、MVCアーキテクチャと最も互換性があり、互換性のある構成はどれか(もしあれば)疑問に思っていますか?
(リストにない場合は、回答の一部として簡単な概要/概要を教えてください)
回答:
2番目と3番目のオプションは同じです。MVCのMはデータモデルではなく、ドメインモデルです。これには、直接行われるかORMを介して行われるかに関係なく、永続性が含まれ、両方とも完全に正しいです。
コントローラーはサイトのフローを管理し、(サービスレイヤーを介して)処理するドメインにデータを渡す必要があるため、そこから永続化するのは間違っています-少なくとも意味的に不快です。
現実的には、MVCはほとんどがUI実装パターンであるため、問題はやや議論の余地があります。ただし、実際には2つの大きな画像オプションしかありません。通常、コントローラーは、1)何らかのサービスレイヤーまたは2)Active Recordパターンのいずれかを使用して、モデル内のエンティティをロードまたは保存するリクエストをディスパッチします。
私の個人的な好みは、集約ルートエンティティのリポジトリ抽象化を使用することですが、その具体的な実装は、何らかのORM、または軽量のDAO、またはアプリケーションにとって意味のある非リレーショナルストアのAPI。
Active Recordパターンは、通常、何らかの基本クラスがストアへのマッピングを管理することを意味しますが、モデルには永続性に対する責任があることを意味するため、モデルは実際には直接関与しません。
基本的に、コントローラーは、それがリポジトリー、UnitOfWork実装、またはエンティティーのSaveメソッドの呼び出しであるかどうかにかかわらず、オブジェクトを永続化するためにリクエストをディスパッチします。リポジトリを使用している場合、モデルオブジェクトは永続性を無視します。