我记不清楚有没有真正的例子可以展示,因为我认为我根据在SO上浏览随机问题和答案得出了我的MVC应用程序的控制器->服务->存储库分层方案。
然而,我可以给你一个如何将您列出的项目组织成我已经构建好的服务层结构的示例。这可能不是最好的方法,但这是我在我的大型mvc应用程序中所做的方式。这应该让你了解如何在你自己的应用程序中进行结构化。
我的服务层每个业务单元合并一个服务类。因此,如果我的应用程序有项目,并且每个项目都有一个人,我会有一个ProjectService类和一个PersonService类。
根据您对控制器工作方式的描述,我的控制器操作如下。
1)获取当前用户信息并调用适当的服务类的授权方法。因此,如果用户尝试修改项目的详细信息,我将向ProjectService的AuthorizeUser方法传递用户ID和项目ID。这意味着如果我更改授权用户项目的方式,我只需更改授权方法,而无需更改每个控制器。
2) Viewmodels在服务层中创建、保存和销毁。服务层接收viewmodel,验证它(如果失败,则引发异常或验证结果),然后将其转换为数据对象,并将其传递给存储库进行保存。它还从存储库请求数据对象,将其转换为viewmodel,并将其返回到控制器。
3) 所有操作的日志记录都在服务层中进行。这可以根据所呈现的操作自动完成(尝试将对象保存到数据库)或者您的控制器可以显式调用服务层来记录操作。
整个目的是将常见功能合并到易于维护的层中。如果更改viewmodel转换为DTO的方式,非常容易知道在哪里进行更改并仅进行一次更改。如果需要更改日志记录、用户访问权限,甚至如果要更改如何从存储库检索某些数据,则只需更改一个简单区域,而不必寻找所有控制器并直接修改它们。
编辑:这使得控制器很小,因为它们只包含对服务层的几个调用,就这样(授权、执行操作、显示视图)。结束编辑
最后,asp.net网站有一个关于在服务层执行验证的教程。该教程可以在
这里找到。