0

我有一个疑问,我承认我是 C# 和软件架构的初学者。我正在研究 ASP.NET MVC4 + EF5,我正在尝试使用三层架构来构建我的应用程序。

在我的 BL 中,我创建了这两个视图模型:

单词

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 将为您加载它们)。

此外,您似乎混淆了视图模型和模型。模型是问题域的表示,这些模型通常保存到数据库中。Viewmodels 是专门定制的类,包含特定视图的所有信息,它们通常存在于 Web 层本身,因为它们与视图紧密耦合。Viewmodels 可以包含从多个模型对象检索到的信息。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 回答