我正在努力寻找布局我的MVC 3项目的最佳方法。在线搜索时,我遇到了一个建议,基本上是说右击项目并添加区域。这样做是在同一个项目中创建一个具有相同控制器/视图/模型结构的区域文件夹。这不是我想要的。我希望有单独项目的灵活性。我将仅保留主Web项目中的视图。单独项目中的其他所有内容。
为了实现这一尝试,我为我的控制器创建了一个单独的项目。现在我被困在将控制器动作指向视图。在所有在线示例中,右键单击并添加视图。这是一个类库项目,我没有这种灵活性。 我哪里错了?
我发现的所有例子,包括我在Asp.net上经历过的例子,基本上都解释了如何创建学习应用程序,这只是为了学习目的。大型商业应用程序不可能在一个项目中拥有所有视图/模型/控制器。或者是它应该进入MVC的方式? 我不确定用鼠标点击做一切也是个不错的主意。在webforms世界中也有很多针对初学者的应用程序,它们使用鼠标点击来创建基本的CRUD应用程序,但是在真正的商业项目中,我们从未使用过那些方法。
您有什么想法,对此有何指导?
感谢您的时间......
答案 0 :(得分:8)
MVC基于一个惯例;惯例是你把/ views中的所有视图,/ models中的模型和/ controllers中的控制器放在一起。你可以改变惯例但不会让你的生活更轻松。
从概念的角度来看,这确实有意义。如果您将所有域逻辑和数据访问保留在单独的项目中,那么您剩下的就是与Web相关的内容,控制器,视图模型和视图。这是你的MVC项目。
请注意,如果您想将零件拆分为单独的项目,您可能会发现portable areas有用。
答案 1 :(得分:4)
我不明白为什么你不能使用内置的生成器作为视图和控制器的基础?没有什么说你必须把它们留下来。我个人认为,为我生成一个基础(点击鼠标)非常好。
MVC项目只是一个UI层。将逻辑放入大规模应用程序中是疯狂的。因此,为所有UI设置一个项目通常很好。它实际上使得更容易获得UI的概述。
也就是说,有一些方法可以获得基于插件的解决方案,您可以将控制器(,模型和视图)移动到类库。但这并不容易。
BuildManager
您的插件DLL存在。如果您希望能够在visual studio中运行时修改视图,还需要修改虚拟路径提供程序以访问插件文件夹中的视图。否则,任何更改都需要重建插件DLL。
<强>更新强>
MVC2的视频(MVC3区域的工作方式相同):http://www.asp.net/mvc/videos/mvc-2/how-do-i/aspnet-mvc-2-areas
请注意,该视频适用于同一项目中的区域。将区域放在单独的类库中会更复杂。最简单的解决方案是按照其他人的建议使用便携式区域。
答案 2 :(得分:2)
为什么只在“主要网络项目”中保留您的观点 - 我认为您忽略了MVC的观点。
控制器是你的“主要网络”部分。它们是您的用户请求和回发的内容,而不是视图。
该视图仅用于提供一种方法来布局HTML以供控制器推送到浏览器。
我认为应该是ViewModels的模型,可以为您的观点提供实质(即实际数据)。
所以你可以看到MVC布局真的希望所有这三个都合理地组合在一起。控制器与您的用户交互,获取视图(布局)并使用您的ViewModel / Model(数据)填充它。这是您的用户界面,MVC的所有三个部分(无论如何使用ViewModel)仅适用于UI。
如果数据来自,您的真实模型以及您想要使用它做的任何内容都可以轻松地驻留在某个网站服务或其他任何地方或其他方面的dll中。