Asp.net mvc ASP.NET MVC是真正的MVC模式吗?

Asp.net mvc ASP.NET MVC是真正的MVC模式吗?,asp.net-mvc,model-view-controller,Asp.net Mvc,Model View Controller,在过去的几天里,我一直在开发一个小型web应用程序。我决定使用ASP.NETMVC。我做出这个决定主要是因为我认为这是真正控制web前端并呈现有效HTML页面的最佳方法。然而,我知道MVC可以做得更多 尽管我的应用程序很小,但我还是专注于应用程序的体系结构。对我来说,有几个层很重要,其中两个层应该可以随时切换:用户界面(Web/Desktop/Webservices)和数据访问逻辑(支持多个数据库)。我认为在模型-视图-控制器模式中,这是可能的 在这种情况下,是否可以将基于web的前端替换为Wi

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

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

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


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

我真的不理解您的问题。如果您想要非HTML格式的视图,请查看不同的ASP.NET MVC视图引擎。如果您想获得WinForms视图,则必须以相同的方式编写业务逻辑,然后从同一解决方案中的WinForms应用程序中获取所有这些类/数据,当用户想要转到此“页面”时,他们必须下载WinForms应用程序并运行它。你可以试着让它看起来像网页,但这并不能保证。

是的,它采用了真正的MVC模式,至少在Martin Fowler指定的意义上是这样的(也许是我们最接近规范定义的东西——有关详细讨论,请参阅他的文章“”

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


MVC并不想让无状态接口(如web应用程序)和厚客户端应用程序(如WPF或WinForms)之间的切换变得容易。这些平台有不同的优点和缺点:试图使用一个控制器来满足这两个要求将导致低于标准的最低公分母实现。

我认为我没有正确地选择控制器。控制器应该包含业务逻辑(不是额外的BLL),但控制器以“retun View();”结束它调用Webfront,我是否可以将其配置为调用“WPF”视图或“Win32”视图,对每种视图使用特定的MVC模式不是一种好模式,因为在这种情况下,我必须重写我的控制器3次。实际上,我希望同时查看一个基于Web的视图和另一个用于桌面PC的视图,这些视图将被编译成.exe,但我只希望有一个控制器。@Johannes,控制器不是BLL,控制器只是HTTP请求映射器/管理器/管理器。MVC确实不适合声明完整的winform或wpf应用程序,可以这样做,但MVP或MVVM是这种类型开发的更好模式。@jfar,在这种情况下,我的解释是,对所有Web特定逻辑使用MVC,对所有应在wpf应用程序中重用的通用逻辑使用附加业务逻辑是正确的?@Johannes,我认为你现在走对了方向。仅保留MVC web。尽管我要添加。M(在MVC中)可以是一个BLL模型,它位于一个自包含的核心dll中,可以被多个客户端引用(如果你愿意的话)。我认为你应该定义“真正的MVC”对你意味着什么,并澄清你用Web服务交换桌面前端的意思。这有点奇怪。对我来说,控制器似乎是BusinessLogic的容器,如果我所有的BusinessLogic都在一个控制器中,并且有一天我想用“WPF视图”或“Win32视图”替换我的“基于Web的视图”,我不想重写所有的逻辑。