Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 构建ASP.net MVC应用程序以使用存储库和服务_Asp.net Mvc_Design Patterns_Service_Controller_Repository Pattern - Fatal编程技术网

Asp.net mvc 构建ASP.net MVC应用程序以使用存储库和服务

Asp.net mvc 构建ASP.net MVC应用程序以使用存储库和服务,asp.net-mvc,design-patterns,service,controller,repository-pattern,Asp.net Mvc,Design Patterns,Service,Controller,Repository Pattern,我最近开始阅读关于ASP.net MVC的文章,在对这个概念感到兴奋之后,我开始将我所有的webform项目迁移到MVC,但我很难让我的控制器保持精简,即使在遵循了所有的好建议之后(或者我就是不明白…)。 我处理的网站有文章、视频、引用。。。这些实体中的每一个都有可以关联的类别、注释和图像。我使用Linq to sql进行数据库操作,对于这些实体中的每一个,我都有一个存储库,对于每个存储库,我创建了一个在控制器中使用的服务 所以我有- 文章库 文章分类报告 文章评论库 以及相应的服务 商品

我最近开始阅读关于ASP.net MVC的文章,在对这个概念感到兴奋之后,我开始将我所有的webform项目迁移到MVC,但我很难让我的控制器保持精简,即使在遵循了所有的好建议之后(或者我就是不明白…)。 我处理的网站有文章、视频、引用。。。这些实体中的每一个都有可以关联的类别、注释和图像。我使用Linq to sql进行数据库操作,对于这些实体中的每一个,我都有一个存储库,对于每个存储库,我创建了一个在控制器中使用的服务

所以我有-

  • 文章库
  • 文章分类报告
  • 文章评论库
以及相应的服务

  • 商品服务
  • 文章类别服务
你看这幅画

我的问题是,我有一个用于文章、类别和注释的控制器,因为我认为让ArticleController处理所有这些可能是有意义的,但现在我必须将所需的所有服务传递给控制器构造函数。所以我想知道我做错了什么。我的服务是否设计不当?我应该创建更大的服务来封装更小的服务并在控制器中使用它们吗?或者我应该有articleCategory控制器和articleComment控制器吗

用户查看的页面由所有内容组成,包括要查看的文章、与之相关的评论、应用的类别列表。。。如何有效地分解控制器,使其保持“瘦”状态并解决头痛问题

谢谢大家!!
我希望我的问题不会太长…这是遵循单一责任模式的副作用。如果每个类都是为一个目的而设计的,那么最终会有很多类。这是一件好事。别害怕。从长远来看,当涉及到更换组件以及调试系统中哪些组件不工作时,这将使您的生活更加轻松


就个人而言,我更喜欢将我的域逻辑更多地放在实际的域实体中(例如article.AddComment(comment)而不是article commentservice.AddComment(article,comment)),但您的方法也非常好。

我认为您的方向是正确的。问题是如何实例化您的服务?我不是MVC.NET大师,但我已经完成了大量面向服务的Java项目,正是您所讨论的模式

在Java领域,我们通常使用Spring来注入单例bean

1) 您可以在.NET中使用依赖项注入框架做同样的事情

2) 如果服务足够轻量级,您可以根据需要在方法中实例化它们

3) 您可以在每个控制器中创建静态服务成员,只要您将其写入线程安全的,以减少对象搅动。这是我在许多情况下使用的方法

4) 您甚至可以创建一个所有控制器都可以访问的简单的全局服务工厂,它可以是一个单例类


也可以在.NET依赖项注入上进行一些谷歌搜索。

如果我显示一篇文章及其相关类别评论图像,我是否必须将它们全部放在一个控制器中才能工作?如何处理像文章这样复杂的对象?我觉得使用您的方法(类别和评论是文章域的一部分)可以帮助我解决问题,同时让我远离SRP…我会有一个具有类别、评论、图像属性的文章类,等等。这些将是延迟加载的,这样当我可能只需要文章元数据时,就不需要我从数据库获取整个对象图。这回答了你的问题吗?我不确定我是否理解这是如何打破SRP的。SRP并不意味着相关实体不能相互引用。你是对的,它们可以相互引用,我没有这样想。非常感谢。我的控制器目前有6-10+个依赖项,我将这些依赖项传递给构造函数。这也会导致庞大的控制器,但这只是因为我经常在一个页面中显示来自不同来源的大量数据,所有这些数据都必须加载到视图模型中。