私はエンティティフレームワークでasp.netmvcを使用しており、DDDの学習を開始しています。私は調査を含むプロジェクトに取り組んでいます。これが私のドメインモデルです:
public class Survey
{
public int? SurveyID { get; set; }
public string Name { get; set; }
public decimal MinAcceptanceScore { get; set; }
public int UserFailsCount { get; set; }
public IEnumerable<SurveyQuestion> Questions { get; set; }
public IEnumerable<Prize> Prizes { get; set; }
public IEnumerable<SurveyAttempt> UserAttempts { get; set; }
}
ビューごとに調査のさまざまな部分が必要なので、さまざまなViewModelを作成しました。
public class ShortSurveyViewModel
{
public int? SurveyID { get; set; }
public string Name { get; set; }
public int UserFailsCount { get; set; }
public IEnumerable<SurveyAttempt> UserAttempts { get; set; }
}
public class ShortSurveyWithPrizesViewModel
{
public int? SurveyID { get; set; }
public string Name { get; set; }
public int UserFailsCount { get; set; }
public IEnumerable<SurveyAttempt> UserAttempts { get; set; }
public IEnumerable<Prize> Prizes { get; set; }
}
public class SurveyEditViewModel
{
public int? SurveyID { get; set; }
public string Name { get; set; }
public decimal MinAcceptanceScore { get; set; }
public int UserFailsCount { get; set; }
public IEnumerable<SurveyQuestion> Questions { get; set; }
public IEnumerable<Prize> Prizes { get; set; }
}
適切なビューモデルに必要な情報を調査リポジトリに取得させたい場合、アーキテクチャを構築するための最良の方法は何でしょうか。
私が見るさまざまな幻想:
リポジトリはIQueryableをSurveyServiceに返し、サービスは適切なビューモデルを返すことができますが、ビューモデルはサービスレイヤーではなくUIで作成する必要があると思うので、これを行うのは正しいと思います。
ドメインレイヤーに3つの適切なクラスを作成します。ただし、ドメインは表現に依存するようになり、新しいビューごとに新しいドメインクラスを作成する必要があります。
完全なドメインオブジェクトを取得し、特定のビューに必要なプロパティのみをマップします。私の例では、質問は1つの表現でのみ必要であり、大量のコレクションになる可能性があるため、これは適切ではありません。