ASP.NET MVC 中的 ViewData 和 ViewBag 对象是数据传输对象 (DTO) 吗?
Is the ViewData and ViewBag object in ASP.NET MVC a Data Transfer Object (DTO)?
如果我将可能是 string
或 int
的东西分配给 ViewData
,我会在视图中使用它。 ViewData
和 ViewBag
是否被视为 DTO?
您可以为它们分配一个对象,但您不必这样做。
是否有时这些被视为和不被视为数据传输对象?
是的,分配给 ViewData 或 ViewBag 的数据传输对象中的值在视图中的处理方式与它们的处理方式相同。就像如果你的 DTO 中有一个 int 类型的变量,在你的视图中你可以通过 ViewBag 将它作为 int 访问。字符串和其他类型变量的大小写相同
我个人只会在数据跨层、服务或应用程序传输时使用术语 DTO。
Wikipedia 定义为:
is an object that carries data between processes
此外,这个在 Whosebug 上受到高度赞扬的 answer 说:
A Data Transfer Object is an object that is used to encapsulate data, and send it from one subsystem of an application to another.
并且:
DTOs are most commonly used by the Services layer in an N-Tier application to transfer data between itself and the UI layer.
这里我们讨论的是将数据从服务层发送到 Web 应用程序,它们是独立的 IIS 应用程序,不一定位于同一台机器上。
在 ViewBag 的情况下,您仍在相同的 layer/subsystem Web 应用程序上,并且没有跨越任何应用程序边界。
您可能会争辩说 View 和 Controller 是不同的子系统,但这会延伸它,因为它们都在同一个编译单元(同一个 dll)中。您还可以争辩说,任何用作其他两个 classes 之间的数据结构的 class 都是 DTO,但这与 DTO 的普遍定义不一致,因为所有业务对象都符合一个 DTO。
如果我将可能是 string
或 int
的东西分配给 ViewData
,我会在视图中使用它。 ViewData
和 ViewBag
是否被视为 DTO?
您可以为它们分配一个对象,但您不必这样做。
是否有时这些被视为和不被视为数据传输对象?
是的,分配给 ViewData 或 ViewBag 的数据传输对象中的值在视图中的处理方式与它们的处理方式相同。就像如果你的 DTO 中有一个 int 类型的变量,在你的视图中你可以通过 ViewBag 将它作为 int 访问。字符串和其他类型变量的大小写相同
我个人只会在数据跨层、服务或应用程序传输时使用术语 DTO。
Wikipedia 定义为:
is an object that carries data between processes
此外,这个在 Whosebug 上受到高度赞扬的 answer 说:
A Data Transfer Object is an object that is used to encapsulate data, and send it from one subsystem of an application to another.
并且:
DTOs are most commonly used by the Services layer in an N-Tier application to transfer data between itself and the UI layer.
这里我们讨论的是将数据从服务层发送到 Web 应用程序,它们是独立的 IIS 应用程序,不一定位于同一台机器上。
在 ViewBag 的情况下,您仍在相同的 layer/subsystem Web 应用程序上,并且没有跨越任何应用程序边界。
您可能会争辩说 View 和 Controller 是不同的子系统,但这会延伸它,因为它们都在同一个编译单元(同一个 dll)中。您还可以争辩说,任何用作其他两个 classes 之间的数据结构的 class 都是 DTO,但这与 DTO 的普遍定义不一致,因为所有业务对象都符合一个 DTO。