ASP.NET MVC中的ViewData和ViewBag对象是数据传输对象(DTO)吗?

时间:2018-01-04 19:39:09

标签: asp.net-mvc dto viewbag viewdata

如果我分配了某些内容,可以是stringintViewData,我会在视图中使用它。这是ViewDataViewBag被视为DTO吗?

您可以为他们分配一个对象,但您不必这样做。

是否有时候这些被认为是数据传输对象?

2 个答案:

答案 0 :(得分:1)

是的,分配给ViewData或ViewBag的数据传输对象中的值在视图中被视为相同的方式。就像在DTO中有一个int类型变量一样,在视图中,您可以通过ViewBag将其作为int访问。字符串和其他类型变量的情况相同

答案 1 :(得分:1)

只有在跨层,服务或应用程序传输数据时,我个人才会使用术语DTO。

Wikipedia将其定义为:

  

是一个在进程之间传输数据的对象

StackOverflow上这个高度赞成的answer说:

  

数据传输对象是一个对象,用于封装数据,并将其从应用程序的一个子系统发送到另一个子系统。

  

DTO最常用于N层应用程序中的服务层,用于在自身和UI层之间传输数据。

这里我们讨论的是从服务层向Web应用程序发送数据,这些应用程序是不一定位于同一台机器上的独立IIS应用程序。

对于ViewBag,您仍然位于同一层/子系统,即Web应用程序,并且不会跨越任何应用程序边界。

你可能会认为视图和控制器是不同的子系统,但这会拉伸它,因为它们都在同一个编译单元(相同的dll)中。您还可以争辩说,任何用作两个其他类之间的数据结构的类都是DTO,但这与DTO的常用定义不一致,因为所有业务对象都有资格作为DTO。