我想为模型,控制器和视图分别创建项目。每个人都会参加不同的项目。模型可以进入类库并添加为dll。
哪种类型的项目最适合控制器?它应该是类库还是Web应用程序?
如果视图在单独的项目中,控制器和视图将如何相互交互?
答案 0 :(得分:3)
ASP.NET MVC的工作原理是约定优于配置。如果您选择了如您所述的项目结构,那么您决定不遵循通常的惯例。
因此,MVC为您提供的大多数优势(如绑定视图和控制器操作,模型绑定,URL路由)都会被抛出窗口。
然而,没有什么可以阻止模型存在于单独的类库中,因为ASP.NET MVC没有对模型类的性质强加任何约定 - 任何C#POCO都可以是包含库类型的模型类。
以你想象的方式做到这一点并不是不可能的,但是现在你必须在框架中配置很多设置(其中惯例已经足够了)。此外,当MVC3升级到MVCX(其中x> 3)时,无法确定您的自定义设置是否会继续工作,从而使升级更加昂贵。
但是,您可以这样做:保持控制器简单和小巧,您可以将大多数服务和存储库和模型和ClassMappings拉出来,并与DI,ORM等集成到单独或组合的DLL中。这样,整个项目结构与MVC约定保持一致,而您的业务逻辑则在其他项目中。
答案 1 :(得分:2)
每当我们创建新的ASP.NET MVC 3/4/5项目时,它都会遵循预定义的目录约定,并为项目添加少量文件和目录。但是,不必遵循此默认目录结构,但它有助于我们保持应用程序的清洁和安全。可以通过基于功能(例如控制器,模型,视图等)对应用程序组件进行分组来维护。但是当涉及到大型项目时,建议在不同的库项目中划分不同的组件。即所有模型类都在单独的库项目中, 所有控制器都进入另一个库项目 ,依此类推。
要分离控制器型号和视图,请执行以下操作
首先,将一个空的MVC 3/4/5 Web应用程序命名为 SeparatingControllerModelsView 。然后添加 控制器 并将其命名为 HomeController 。现在添加 模型类 并将其命名为 TestModel 。 添加视图 右键单击Index方法并选择TestModel以创建强类型视图。
现在分离模型和控制器添加两个 库项目 并将其命名为 ModelLibrary& ControllerLibrary 即可。从两个库项目中删除默认类。右键单击 ModelLibrary 项目,然后单击“属性”。在创建模型类TestModel时,项目属性将打开并使用命名空间(SeparatingControllerModelsView.Models)更改 默认命名空间。 现在右键单击ModelLibrary项目并单击添加现有项并从 SeparatingControllerModelsView Web应用程序中添加 TestModel 类。
通过这种方式,还可以使用 HomeController 的名称空间更改 控制器库名称空间 强>上课。现在添加引用 System.Web,System.Web.Mvc 。从 SeparatingControllerModelsView Web应用程序中添加 HomeController 类,右键单击ControllerLibrary,然后添加现有项目。
现在 从SeparatingControllerModelsView 中删除Controllers and Models目录。添加引用两个库项目并运行它的工作方式,就像默认的MVC项目一样。
如果项目中添加了任何区域,则需要根据区域添加另一个库项目。更改库的默认命名空间(包括控制器和模型),相应地更改区域控制器和模型的命名空间。
由于命名空间与分离的库相同,因此在运行时使用命名空间可以轻松地相互交互。
也可以使用以下链接
Creating an ASP.NET MVC Areas Application Using Multiple Projects
最终项目将如下所示....