0

いくつかの調査を行った後、ほとんどの人が、サービスから取得したエンティティをコントローラーの (ビュー) モデルにマップしていることがわかります。私の意見では、これは実装上の問題を引き起こします。コントローラーは、サービス/ビジネス ロジックではなく、特定のデータの非表示/表示を担当します。たとえば、ユーザー オブジェクトの場合、パスワード フィールドはエンティティ内にあるため、サービス レイヤーからコントローラーに転送され、コントローラーはそれを非表示にする必要があります。

いろいろ考えた結果、別の方法を思いつきました。リポジトリ レイヤーはエンティティを返します。サービス レイヤーでは、エンティティがモデルにマップされ、ViewModel については、モデルを拡張して MVC (検証用) のメタデータを追加する別の部分クラスを作成します。

using System.ComponentModel.DataAnnotations;

[MetadataType(typeof(MyClassMetadata))]
public partial class MyClass
{
  private class MyClassMetadata
  {
     [Required]
     public int Id;

     [Required]
     [StringLength(100)]
     public string Name;
  }
}

第 2 に、エンティティがリレーショナル エンティティを必要とする場合、たとえば市がデータベースに保存する前に国への参照を必要とする場合、国を添付せずに市をサービスに送り返すのは奇妙です。これにより、国を取得することがコントローラーになります。ただし、私の意見では、これはサービスによって実行されるアクションである必要があります (おそらく、別のサービスまたはリポジトリと組み合わせて)。

上記は一般的なやり方ではないので、何か見落としが気になりますか?上記のように実装すると、(予期しない) 問題が発生しますか?

4

1 に答える 1

0

私はあなたの最初の質問に答えることができますが、N 層と ORM の経験がないため、(ORM を使用した関係エンティティに関して) 2 番目の質問には答えられません。

最初の質問では、プレゼンテーション レイヤーに (ビュー) モデルを含めることを意図しています。設定が必要な画面位置、CSS スタイルなどの UI 固有のロジックがある場合、ビュー モデルはそれらの情報を保持するのに役立ちます。

1000 件のリクエストを取得する必要があるとします。これらのリクエストの中には、分類されていない 300 件のエラー リクエストと 200 件の警告リクエストがあります。カスタマイズされたスタイル (エラー リクエストの場合はフォントの色を赤にするなど) を使用して、これらのリクエストをグリッドに表示する必要があります。

最も簡単な方法の 1 つは、css クラスを各リクエストに割り当て、そのクラスを使用して各リクエストのスタイルを決定することです。

2 番目の質問については、 や などのさまざまな方法を提供することで、関係エンティティの要件が満たされるGetCityGetCityWithCountry思います。しかし、それは私の 2 セントです。

于 2013-06-27T09:47:29.780 に答える