【发布时间】:2011-03-24 22:50:01
【问题描述】:
好的,我正在尝试重写这个设计不佳的 ASP.NET MVC 应用程序中的大部分代码。我已经阅读了很多关于许多概念和模式的内容,其中一些更高级,但我发现自己对非常基本的人员感到困惑。
那么 MVC 应用的整体结构应该是怎样的呢?
我有一些封装数据访问的东西——我们称之为“数据层”。它可能是存储库模式的实现,或者只是一些实体框架上下文类或......
然后我将服务层包装业务逻辑。
服务 http 请求的场景应该是什么? 为请求创建控制器 --> 对其执行操作。然后 ?我创建“数据层”的实例并将其传递给方法服务层提交更改并显示结果?
所以所有服务(属于服务层)中的每个方法都应该将一些“数据层”类作为参数,以便它可以与“数据层”对话?或者我是否将“数据层”引用传递给构造函数中的服务?在那种情况下,我必须为每个请求创建新服务吗?
我读过关于在控制器中使用using 关键字将“数据层”引用传递给服务。另一种方法是使用依赖注入。我真的不明白其中的区别......为什么不在控制器构造函数中创建它并保持简单?
【问题讨论】:
-
我认为您对 using 关键字感到困惑,因为它所做的只是确保调用 Dispose,并且使用 DI 可以帮助您对控制器进行单元测试,因为您可以传入一个模拟语境。 DI还有其他优势,比如去耦等。
-
嗯,依赖注入将允许您将“数据层”传递给构造函数,而不是到处都有一堆
new ...。这使您可以将“数据层”的创建方式与其使用位置分离(正如 Linkgoron 所指出的,这有助于单元测试)。 -
谢谢你们,我想我明白这部分了。
-
这里也有一些很好的基础知识:stackoverflow.com/questions/2503442/…
标签: .net asp.net-mvc design-patterns controller repository-pattern