2012-04-12 42 views
1

对于一个例子简单,可以说我有一个对象模型与下面的层级数据类:将分层数据传递给视图的最佳实践/首选项?

  • 作者

每个这些数据类只有con为他们的子女,而不是他们的父母提供实例的引用,他们只包含Id。例如,Book有Book.Chapters,但它没有对其父(即:Book.Author)的引用,而是具有父代的Id(即:Book.AuthorId)。

现在我想在我的视图中显示这个层次结构的'breadcrumbs'。但要做到这一点,我需要得到的信息,如Author.Name,Book.Name ......所以,我看到它,我有以下选择:

  1. 为每个视图创建自定义模式。即:new SingleBookViewModel {TheAuthor = DB.GetAuthor(book.AuthorId),TheBook = book}

  2. 从书中获取视图本身的数据。因此,例如,如果我有书视图,我可以使用:Author author = GetAuthor(book.AuthorId)...并在剃须刀视图内执行此操作。

  3. 使用Tuple类传递数据。因此,对于观看的章节我会填上以下签名的元组的型号:

    Tuple<Author, Book, Chapter>

你会用哪种方法?或者你会使用不同的东西?

目前我正在使用第三种方法,Tuple。

第二种方法可能是最“标准”的。但我不喜欢必须创建和维护与每个数据类(作者,书,章)相对应的视图模型类的想法。

我想了解人们在这方面所做的最佳实践......以及使用元组是否合理。

回答

1

我会用ViewModels实现这一点。您的每个视图都将被强制键入ViewModel,该ViewModel将包含该视图所需的所有数据。您可以在该ViewModel中获得一组作者,其中包含一系列书籍,其中包含一系列章节。

作为一种替代方案,您可以将您的视图绑定到作者集合,并在选择作者时向控制器的操作发出ajax请求,以返回Json格式的书籍。这同样适用于章节。

+0

不幸的是,Ajax/JSON无论如何不会帮助我,因为数据是静态的(意思是在视图呈现后它不会改变)并且是'面包屑'信息需要从用户那里显示给用户开始。 – Skonen 2012-04-12 09:01:46

+0

然后创建一个ViewModel对象,它包装所有你需要的数据,甚至是应该显示在面包屑中的数据。你的视图只是呈现它收到的任何东西。这不工作吗? – Dante 2012-04-12 09:25:52

+0

是的。唯一的缺点是我在关于这些视图模型的创建/维护命中的问题中提到。 – Skonen 2012-04-12 09:30:45

相关问题