シナリオ:レポート生成を処理するプログラムを作成しています。ドメインとEFに別々のモデルを使用する必要がありますか?
私はEFモデルにマップされたデータベースにレポートを保存しています。非データベースフィールドがいくつかあります(つまり、一部のフィールドは、データベースにある他のフィールドに基づいて自動的に計算されます)。 DBに単独でマップする1つのクラスと、その情報を受け取り、さらに他の計算フィールドを持つ別のクラスを持つことは理にかなっていますか? codefirstデータベースと対話するためのサンプルクラスすなわち
は、それが別のクラスを作るために理にかなって
public class Report{
public int CategoryOneSeverity {get; set;}
public int CategoryTwoSeverity {get;set;}
public string Title {get;set;}
}
だろう、のような:
public class ReportModel{
public int CategoryOneSeverity;
public int CategoryTwoSeverity;
public string Title;
public int RiskRating{
get{ return CategoryOneSeverity + CategoryTwoSeverity; }
}
}
それともRiskRatingプロパティはEFにする必要がありますモデル。
私は、別々のクラス(データストアをモデル化するモデルとビジネスドメインをモデル化するモデル)を用意しなければならないという受け入れられた答えに同意します。しかし、2番目のクラスはいくつかの優れた設計公理に違反しています。最も顕著なのは、フィールドが公開されてはならないということです。 –
私は実際にプライベートメンバーを入れてから、それを取得するためにプロパティを使用するのが好きではありません。特に変更が予想される分野では、フィールドがより意味をなさないか?すなわち、ユーザはいつでもタイトルを変更することができる。 – appsecguy
いいえ、実際、それは意味をなさないし、私が言ったように、良いデザインの面で飛ぶ。このプロパティを使用して、検証ロジックを追加し、バッキングフィールドの表現を変換で変更し、最終的に安定した消費者表面積を維持することができます。私たちの良い友達であるJon Skeetがもっとうまくいっているようにしてください:http://www.csharpindepth.com/Articles/Chapter8/PropertiesMatter.aspx –