0

疑問があります。私はC#とソフトウェアアーキテクチャの初心者であることを認めます。ASP.NET MVC4 + EF5に取り組んでおり、3層アーキテクチャを使用してアプリを構造化しようとしています。

私のBLでは、次の2つのビューモデルを作成しました。

namespace BL
{
  public class WordViewModel : IWord
  {
    [Required, ReadOnly(true)]
    public int WordId { get; set; }
    public string LanguageId { get; set; }
    public int VocabularyId { get; set; }

    public LanguageViewModel Language { get; set; }    
    public VocabularyViewModel Vocabulary { get; set; }    
  }
}

単語

namespace BL
{
  public class VocabularyViewModel : IVocabulary
  {
    [Required, ReadOnly(true)]
    public int VocabularyId { get; set; }
    public string Name { get; set; }
    public List<WordViewModel> Words { get; set; }
  }
}

デバッグ私は一種の「ネストされたループ」があることに気づきました(そしてそれは明らかです)。つまり、単語には単語のリストを含む語彙が含まれ、各単語には単語のリストを含む語彙が含まれます...そしてすぐ。

チュートリアルに続いて、私が書いたものは正しいように思えます..しかし、私はパフォーマンスとメモリ消費を考えています..それは問題ですか?(しかし、私の設計も間違っているはずです、私はそうしないことを望みます)

さらに、それは大きな問題ではありませんが、AutoMapperを使用して、DALレイヤー(実際にはWordRepositoryとVocabularyRepository)によって提供されるオブジェクトをビューモデルにマップしています。ネストされたマッピングを作成するのは簡単ですが、繰り返しになりますが、メモリを消費しますか?

ありがとう..私は初心者であることを知っています、そして私は最善を尽くそうとしています:)

4

1 に答える 1

2

モデルでは双方向の関係を避けるようにしてください。通常、それは必要ではなく、維持するために多くの追加コードが必要です。たとえば、単語が語彙に追加されたときに、語彙への参照が単語モデルに設定されていることを確認するコードは表示されません。このようにして、モデルは簡単に無効な状態になる可能性があります。

この場合、単語モデルの語彙を参照する必要はないと思います。語彙はリポジトリによって取得でき、Listプロパティを介して単語にアクセスできます(EFがそれらをロードします)。

また、ビューモデルとモデルを混同しているようです。モデルは問題のドメインを表したものであり、これらのモデルは通常データベースに保存されます。ビューモデルは、特定のビューのすべての情報を含む特別に調整されたクラスであり、ビューに密接に結合されているため、通常はWebレイヤー自体に存在します。ビューモデルには、複数のモデルオブジェクトから取得した情報を含めることができます。Automapperは、モデルオブジェクトからビューモデルを作成するためによく使用されます。

リポジトリは、モデルを取得して保存するクラスです。彼らはこのように見えます:

public class VocabularyRepository
{
  public Vocabulary Get(int id)
  {
    ... 
  }

  public void Save(Vocabulary vocabulary)
  {
    ...
  }
}

ここで学ぶことはたくさんあります。これがあなたを正しい方向に導くことを願っています。asp.net mvcアーキテクチャの詳細については、この質問を確認してください:https ://softwareengineering.stackexchange.com/questions/30348/best-practices-for-mvc-architecture

于 2013-01-27T12:51:43.823 に答える