【问题标题】:Is ASP.NET MVC a real MVC-Pattern?ASP.NET MVC 是真正的 MVC 模式吗?
【发布时间】:2011-03-23 09:02:51
【问题描述】:

在过去的几天里,我一直在开发一个小型 Web 应用程序。我决定使用 ASP.NET MVC。我做出这个决定主要是因为我认为这是真正控制 Web 前端并呈现有效 HTML 页面的最佳方式。但是,我知道 MVC 可以做得更多。

尽管我的应用程序很小,但我还是专注于应用程序的架构。对我来说有几个层很重要,其中两个应该可以随时切换:用户界面(Web / Desktop / Webservices)和数据访问逻辑(支持多个数据库)。我认为在模型视图控制器模式中这是可能的。

在这种情况下,是否可以将基于 Web 的前端替换为 Win32 或 WPF 前端?这是可能的还是我理解错了?我找不到办法做到这一点。

我发现这样做的唯一方法是创建 MVC-Layer、BusinessLogic-Layer、BusinessObject-Layer 和 DataAccess-Layer。在这种情况下,所有可以被 WPF 应用程序重用的通用东西,例如我放入业务层,所有 MVC 特定的东西我放入 MVC 层,我的控制器所做的大部分工作是调用 BL 方法并构建一个 ViewModel并将其返回到视图。我不确定这是否是一个正确的解释,并感谢有关更好做法的建议。

【问题讨论】:

  • 我认为您应该定义“真正的 MVC”对您意味着什么,并通过将桌面前端与 Web 服务交换来阐明您的意思。这有点奇怪。
  • 对我来说,控制器似乎是 BusinessLogic 的容器,如果我所有的 BusinessLogic 都在一个控制器中,并且有一天我想用“WPF-Views”或“Win32 Views”替换我的“基于 Web 的视图” " 我不想重写所有的逻辑。

标签: asp.net-mvc model-view-controller


【解决方案1】:

是的,它采用了真正的 MVC 模式,至少在 Martin Fowler 的 Patterns of Enterprise Application Architecture 所指定的意义上(也许是我们拥有的最接近规范定义的东西 - 请参阅他的文章 'GUI Architectures' 进行扩展讨论)。

MVC 的核心是为用户界面驱动的应用程序建立清晰的关注点分离。

MVC 并不声称可以轻松地在无状态界面(如 Web 应用程序)和胖客户端应用程序(如 WPF 或 WinForms)之间切换。这些平台有不同的优势和劣势:尝试使用单个控制器来满足两者都会导致实现低于标准的最低公分母。

【讨论】:

    【解决方案2】:

    我真的不明白你的问题。如果您想要不在 HTML 中的视图,请查看不同的 ASP.NET MVC 视图引擎。如果你想给你一个 WinForms 视图,你必须以同样的方式编写业务逻辑,然后在你的同一个解决方案中从 WinForms 应用程序中获取所有这些类/数据,当用户想要去这个“页面”,他们必须下载 WinForms 应用程序并运行它。您可以尝试使其看起来像网络内容,但这不能保证。

    【讨论】:

    • 我认为我理解错了,控制器应该包含 BusinessLogic(不是额外的 BLL),但控制器以“retun View();”结尾调用 Webfront,我可以将其配置为调用“WPF”视图或“Win32”视图吗,对每种视图使用特定的 MVC 模式不是一个好的模式,因为在这种情况下,我必须重写我的控制器 3 次。在实践中我想同时查看一个基于 Web 的视图和另一个用于台式机的视图,它们将被编译成 .exe,但我希望只有一个控制器。
    • @Johannes,控制器不是 BLL,控制器只是 HTTP 请求映射器/管理器/主管。 MVC 确实不适合状态完整的 winform 或 wpf 应用程序,可以做到,但 MVP 或 MVVM 是该类型开发的更好模式。
    • @jfar,在这种情况下,我对所有 Web 特定逻辑使用 MVC 并为应该在 WPF 应用程序中重用的所有通用逻辑使用附加 BusinessLogic 的解释是正确的?
    • @Johannes,我认为你现在走在正确的轨道上。仅保留 MVC Web。
    • 我想补充一下。 M(在 MVC 中)可以是一个 BLL 模型,它位于一个独立的核心 dll 中,可以被多个客户端引用 - 如果你愿意的话。
    猜你喜欢
    • 2013-09-01
    • 2012-10-26
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    相关资源
    最近更新 更多