ドメインモデル(データモデル+ビジネスモデル)が別のクラスライブラリにあるMVCアプリケーションがあります。私は、データを返さなければならないいくつかのメソッドを公開しているインターフェイスを使用していますが、必ずしも自分のドメインオブジェクトの表現全体ではありません。インターフェイスの使用時にドメインモデルが返すべきことは何ですか?
私の質問はどのようにデータを返すべきですか?
ビジネスモデルレイヤーで一種のビューモデルを作成し、メインアプリケーションの実際のビューモデルと一致させる必要がありますか(views-controllers-viewmodels
)?
このデータを動的オブジェクトとして返す必要がありますか?
ドメインオブジェクト全体のイベントを返す必要がありますいくつかのプロパティのみが必要ですか?
ベストプラクティスは何ですか?
//Domain Class
public class User
{
public string UserName { get; set; }
public int UserId { get; set; }
public string UserPassword{ get; set; }
public string FirstName{ get; set; }
public virtual ICollection<ApplicationUserTeam> ApplicationUserTeams
{
get { return _applicationUserTeams; }
set { _applicationUserTeams = value; }
}
}
public interface ITrackAttendance
{
dynamic GetUsersCompany(int CompanyId);
}
public class TrackAttendanceServices : ITrackAttendance
{
//Method returning a Dynamic Object???
public dynamic GetUsersCompany(int CompanyId)
{
using (var _ctx = new TrackAttendanceDb())
{
return _ctx.Users.Where(u => u.ApplicationUserTeams.FirstOrDefault().Team.CompanyId== CompanyId)
.Select(u =>
new
{
UserName = u.UserName,
UserId = u.Id,
userState = false
}).ToList();
}
}
}
プロジェクトのアーキテクチャ:
この
は、状況についてのより良いアイデアを与える例であるマイソリューション:持っているすべての専門家に
感謝私はこの質問に対して意見を与えられたので、次の点についてDTOアプローチ(@ uk2k05)に従うことにしました:
- 非常にクリーンなアーキテクチャを維持できます。
- このアプローチは、1つの責任原則に沿っています。
- これは、アプリケーションレイヤが基盤となるドメインモデルに依存しないことを保証します。
ファクトリパターン(@Liam)やコマンドクエリ分離(CQS)(@ L-Four)など、ここで挙げたその他の興味深いアプローチを理解しておく必要があります。私の特定の環境に複雑さと作業を追加する可能性があります。 CQSとFPは(私の謙虚で個人的な意見から)アーキテクチャを定義するための心のシフトを必要とします。
ドメインモデルエンティティをクエリ用に返すのはなぜですか?クエリからコマンドを分離し、クエリのためにドメインレイヤをバイパスするのはなぜでしょうか。 –
申し訳ありませんが、私は何を意味していません。もう少し明示的にしてもらえますか?ありがとう。 –
ここであなたがしようとしていることは、[Factory pattern](https://en.wikipedia.org/wiki/Factory_method_pattern)によってより良く解決できると思います。ファクトリを作成し、ファクトリを呼び出してオブジェクトを返します。コントローラ内でこのオブジェクトを使用します(おそらく、インプリメンテーションに応じてViewModelに変換します)。それはあなたの質問が非常に不明であると言いました。例えば、これのどの部分がリポジトリパターンであると思われますか? – Liam