MVC体系结构的最佳做法


28

我的问题更多是关于如何构建MVC应用程序。例如,鼓励我们使用带有存储库模式的DI来分离控制器的数据访问,但是在HOW上很少提到专门针对MVC做到这一点。例如,我们将存储库类放在哪里?它们似乎与模型无关,因为模型也应该与实际的数据访问技术相对分离。

第二个问题涉及如何构造层或层。大多数示例应用程序(书呆子晚餐,音乐商店等)似乎都使用单层2层方法(不计算测试),通常具有直接调用L2S或EF代码的控制器。

如果要创建多层/层应用程序,那么关于MVC的最佳实践是什么?

Answers:


5

DI是使用Controller Factory在ASP MVC中完成的。该工厂用于解决您的控制器依赖性。

MvcContrib具有一些Controller Facotry实现,您可以直接使用它们。我使用他们的温莎城堡实现,效果很好。还建议您检查他们的TestHelper类。它有嘲讽控制器的HttpContext,会话等。一些非常酷的功能 MVCContrib

我个人喜欢给我的模型一个可以使用的Repository实例。该模型向存储库(CRUD)公开一个api。控制器对特定模型的依赖关系在创建(构造函数)时注入,这是通过Controller Factory注入的。这是我的IoC容器管理的对象图的入口。


2

例如,我们将存储库类放在哪里?

它们属于模型;它们是应用程序内模型。

如何构造图层?如果要创建多层/层应用程序,那么关于MVC的最佳实践是什么?

层表示代码的物理分隔。层代表逻辑分离。这些层(目前是这样)适合MVC。根据业务逻辑的数量,可以将其放置在控制器中,也可以将其放置在单独的程序集中,并可以在请求周期中由控制器使用。


因此,您建议他们应该将其放入多层应用程序的UI项目中?
Erik Funkenbusch 2010年

@Mystere Man如果它不是巨大的,那么他们应该进入托管您的MVC应用程序的项目。具体来说,业务逻辑将进入控制器,并且每个动作将具有其自己的逻辑。MVC不仅是仅UI模式;这就是为什么我不同意您关于这是一个“ UI项目”的主张的原因。不是。这是一个MVC项目,作为一个View部分(有您的UI)。
乔治·斯托克

好吧,也许我说得不好。但是,您是否不同意视图层不应操纵数据库?并且,如果将Repository类放入模型中,则视图可以这样做。
Erik Funkenbusch 2010年

在Small MVC应用程序中,UI“ Layer”只是保存视图的文件夹。在较大的应用程序中,它可以是自己的项目。如果是自己的项目,则它将与控制器协调,并且控制器可以根据需要连接到BusinessLayer。控制器外部的任何人甚至都不需要知道业务层的存在。我认为您会自动认为这些项目位于单独的项目中,但不必一定要这样做。
George Stocker 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.