坦率地说,技术主管是错误的。
在以前从未使用过真正的 MVC 框架的人们中存在一个普遍的误解,即“MVC”只是 Web 表单的一种不同风格,而事实上,事实并非如此。
要了解为什么会出现这种情况,您需要了解架构模式MVC 和微软构建的实现 MVC 模式的框架ASP.NET MVC 之间的区别。
通常,技术主管和架构师等不太了解该主题的人会使用术语“MVC”来描述模式和框架不了解两者之间的区别,这通常会导致混淆。
所以,要明确一点,MVC 模式并不是什么新鲜事物,它实际上由很多框架实现,例如:
Webforms 不是开箱即用地实现 MVC 模式的框架之一。
现在确实可以在 WebForms 中实现 MVC 模式,但 Webforms 更适合实现 MVP 样式模式,而且实际上有围绕 (such as this one) 的框架可以在这方面为您提供帮助。
技术主管不知道他在说什么的最大指标是:
我的技术主管决定插嘴,告诉我上面的项目
(tiered, webforms) 和 MVC 一样
在您的应用程序中引入“层”与 MVC 无关。事实上,在分层架构中,MVC 应用程序将完全位于表示层中,与其他应用程序层无关。
将 ASP.NET MVC 用于您的前端意味着您有一个表示层,它位于使用 ASP.NET MVC 框架实现的逻辑层之上。这并不意味着您仅仅因为使用 MVC 就突然不再需要其他层。
相反,Webforms 只是分层架构中的表示层。仅仅因为您使用的是分层架构绝不意味着您使用的是 MVC 模式。
到其他每个点:
视图只是 ASPX 页面
这不是真的。 ASPX 页面是非常复杂的野兽,在 MVC 视图之间有一个非常重要的区别:
它们旨在维护状态
他们拥有整个页面生命周期、视图状态和控件系统,旨在维护回发之间的状态。
ASP.NET MVC 被设计为无状态的,因此,视图不包含这样的复杂性。
控制器只是页面隐藏
这句话完全忽略了控制器的意思。
代码隐藏明确了解与呈现 ASPX 页面的过程有关的所有内容。它了解页面上的控件、页面的状态、页面的生命周期,并且与视图非常紧密耦合。
代码隐藏也只会返回一件事。一个 aspx 页面。
控制器更加灵活,不仅可以返回视图,还可以用于控制呈现数据不同表示的逻辑。例如,您可能希望将相同的数据呈现为标准 http 请求的 HTML,或呈现为 AJAX 请求的 JSON。
这是可能的,因为控制器逻辑和视图逻辑是松散耦合,这使得这成为可能。
模型只是数据对象
这是错误的。在具有任何复杂性的任何类型的 MVC 应用程序中,您都很少将数据对象直接绑定到视图。简而言之,您的数据在数据库中的建模方式很少能代表显示视图所需的数据。
例如,假设您有一个员工记录,其中包含“TitleId”。记录中的数据只是一个 int,但您需要向用户显示一个实际的文本值才能使其有意义。
因此,在大多数 MVC 应用程序中,您的“模型”实际上会更准确地描述为“视图模型”,并且与您的数据或域模型完全分离。
总结
您的技术主管错了,不仅在语义层面上错了,而且在“你不知道你在说什么”层面上也错了。
- 在 Web 表单中使用分层架构并不意味着您已经实现了 MVC 模式。
- ASPX 页面与视图完全不同
- 代码隐藏与控制器完全不同
- 模型与您的数据对象无关。
希望对您有所帮助。