0

我正在使用 ASP.NET MVC。我做了3节课。我想知道我应该在哪里存储这些类?根据我对 MVC 的理解,它们不应该存储在 Controller 部分。那正确吗?

4

5 回答 5

2

控制器部分用于控制器,因此在那里存储其他类型的类没有意义。不过,您几乎可以将它们存储在任何您想要的地方。只需制作文件夹或根据需要对它们进行分类。这一切都取决于您自己的约定和风格。

想想这些类做了什么,以及如何对它们进行分类。

于 2013-11-14T22:11:17.057 回答
2

你问的是什么类型的课程?

控制器位于 Controllers 文件夹中,视图位于 Views 文件夹中,模型位于 Models 文件夹中。一般来说,这就是这些相应文件夹中应该包含的所有内容。

如果您在此之外需要一些“帮助程序”(例如工厂类),通常建议将它们放在与 Controllers、Views 和 Models 文件夹相同级别的单独文件夹(或多个文件夹)中。但是,一般来说,尽可能多的逻辑应该在控制器中(当然,除非你有一个单独的中间层)。

根据评论更新:

我正在制作日历应用程序。所以当用户输入开始日期和结束日期时,我的班级会计算实际天数。例如周一周三周五活动的天数。然后该事件将被添加到数据库中。那么我可以在控制器中实例化这个对象(一个计算天数并添加到数据库的对象),然后将它传递给模型吗?还是应该在模型层完成逻辑?

我会在控制器中执行此操作。MVC 的流程从控制器开始,控制器填充模型,然后将模型传递给视图并返回视图。

但是,您还应该区分域模型视图模型。您的视图模型真的不应该与数据库有任何关系;它只是用来填充视图。域模型可能有双重目的,尽管我更喜欢将它们分开。

无论哪种方式,实际的数据库访问逻辑(如果它不在中间层)更适合控制器而不是模型。我会在控制器中实例化您的辅助对象,并让它在控制器中做它需要做的事情;数据库访问对象通常不需要传递给视图模型。

当然这是一般来说,在某些情况下可能会有更好的例外情况。

于 2013-11-14T22:11:34.420 回答
0

我相信你指的是模型类,所以把它们放在Models.

于 2013-11-14T22:11:07.470 回答
0

如果这是程序的逻辑,我将创建一个层,因为 BLL(业务逻辑层)将该类放在那里并在表示层或其他任何使用它的地方引用它。

于 2013-11-15T15:24:32.463 回答
0

我强烈建议您花一些时间研究面向对象编程原则 (SOLID),然后尝试了解您的“真实世界”MVC Web 应用程序的架构应该是什么样子。我明确提到“真实世界”,因为您会在 Internet 上找到的许多教程都是技术可能性的简化表示,但它们并没有告诉您这将如何适合您自己的应用程序。我最近在这两个方面投入了很多时间,对我帮助很大。不是说我现在掌握了所有知识,但我确实得到了更好的理解。

作为对您问题的回答:我认为这些类不应该在控制器文件夹中,因为它们不是控制器。我认为它们属于您的业务层(可以是单独的项目),因为它们负责一些业务逻辑。此外,将事件添加到数据库与日期计算不属于同一类,因为这将违反 SRP ( http://en.wikipedia.org/wiki/Single_responsibility_principle )。这应该在您的数据层中的一个单独的类中(可以是另一个单独的项目),您可以从业务层调用它。

另一件有趣的事情是这种称为胖控制器的反模式(http://codebetter.com/iancooper/2008/12/03/the-fat-controller/)。

于 2013-11-15T07:39:34.607 回答