Asp.net mvc 构建ASP.net MVC应用程序以使用存储库和服务
我最近开始阅读关于ASP.net MVC的文章,在对这个概念感到兴奋之后,我开始将我所有的webform项目迁移到MVC,但我很难让我的控制器保持精简,即使在遵循了所有的好建议之后(或者我就是不明白…)。 我处理的网站有文章、视频、引用。。。这些实体中的每一个都有可以关联的类别、注释和图像。我使用Linq to sql进行数据库操作,对于这些实体中的每一个,我都有一个存储库,对于每个存储库,我创建了一个在控制器中使用的服务 所以我有-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进行数据库操作,对于这些实体中的每一个,我都有一个存储库,对于每个存储库,我创建了一个在控制器中使用的服务 所以我有- 文章库 文章分类报告 文章评论库 以及相应的服务 商品
- 文章库
- 文章分类报告
- 文章评论库
- 商品服务
- 文章类别服务
我希望我的问题不会太长…这是遵循单一责任模式的副作用。如果每个类都是为一个目的而设计的,那么最终会有很多类。这是一件好事。别害怕。从长远来看,当涉及到更换组件以及调试系统中哪些组件不工作时,这将使您的生活更加轻松
就个人而言,我更喜欢将我的域逻辑更多地放在实际的域实体中(例如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+个依赖项,我将这些依赖项传递给构造函数。这也会导致庞大的控制器,但这只是因为我经常在一个页面中显示来自不同来源的大量数据,所有这些数据都必须加载到视图模型中。