4

我正在编写一个设计文档,我团队中的人愿意从 ASP.NET WebForm 迁移到 ASP.NET MVC。这很好,但我很难理解 MVC 如何在 3 层(数据层、业务层和表示层)架构中工作。我们可以说模型、视图和控制器是表示层的一部分吗?模型是业务层的一部分吗?

简而言之,MVC 和 3 层架构如何协同工作?谢谢您的帮助!

4

7 回答 7

17

我认为 ASP.Net MVC 位于表示层中。它使用的“模型”类实际上是视图模型,它描述了视图所需的数据结构。您的所有业务逻辑和数据访问都应该与您的 MVC 模型和控制器分开。

此外,MVC 的一般“最佳实践”是使控制器代码尽可能简单,这通常意味着在处理繁重工作的业务层中引入一些应用程序服务。

于 2010-06-15T16:49:00.400 回答
4

表示层是您的视图。

数据层是您的模型(建议查看存储库模式)。

业务层保持原样。

Controller 可以在加载对象时调用业务层的功能,或者模型可以在请求特定 ViewModel 时调用业务层的功能,否则保持不变。

控制器不应该有扩展的业务逻辑——把它放在它自己的独立 DLL 中。

于 2010-06-15T16:47:23.930 回答
1

这是相当主观的。 做对你的团队有意义的事情。

MVC 可以非常灵活,几乎没有任何 MVC 框架在所有语言中都以相同的方式做事。即使在 .net 空间中。FubuMVC、Spring.net 和 MS MVC 都以稍微不同的方式做事。

于 2010-06-15T18:10:22.317 回答
1

首先,您不必仅仅因为......如果您有一些正在工作的东西,我认为您不需要更改为 MVC。

但是对于您的问题,MVC 模式中的模型是代表您的业务问题的任何类型的类,可以是任何类型的计算、业务规则或数据访问类。在 MVC 框架中,有一个文件夹可以为您提出解决方案,因此您可以将模型类放在那里,但您不必这样做,您可以创建不同的项目来解决您的业务问题,这就是您的模型。因此,在这里,您可以定义任何其他即时模式,您可以使用存储库模式并使用 NHibernate 或实体框架实现它。

视图只是向用户显示和接收信息的网页。

控制器是您的应用程序的入口,这些类将接收请求、调用必要的模型并重定向到指定的视图。

希望我能帮上忙。

于 2010-06-15T21:00:05.707 回答
1

N-Tier 与 MVC 工作得很好。只需遵循 SOLID 原则和其他几个原则,您就可以使您的应用程序保持松散耦合和内聚。

我会说阅读有关 MVC 3 的书籍和观看pluralsight.com 视频是您最大的资源。你不能选择“做对你的团队有用的事”。如果说名为 Johnny 和 Timmy 的工作伙伴想要将一堆逻辑放入控制器中,只是因为在短期内“为你的团队工作”的截止日期匆忙,这并不能使它正确/好/聪明。

我在互联网上发现了如此多的糟糕文章,以至于令人恐惧的是有多少人被带入了一条黑暗的苦难之路。走幸福的道路。将 stackoverflow 用于艺术之类的意见,但请查看 msdn 文章、mvc 书籍和pluralsight.com

于 2011-11-24T10:06:18.567 回答
0

我知道这只是一个维基百科链接,但这里有一些关于n 层与 MVC 架构的信息。

于 2010-06-15T16:47:58.500 回答
0

“层”是一个部署单元,而 MVC 中的“层”是代码中职责的逻辑分离。

于 2010-06-15T19:02:51.690 回答