tau*_*dep 6 asp.net-mvc asp.net-mvc-2
我的控制器变得越来越大而失控.
典型的控制器执行以下操作:
简而言之,他们很多东西都是ORCHESTRATE.我想将所有内容都移到一个服务层,但我还没有真正看到我喜欢的代码示例中的任何实现模式.我看过一些像KiGG,Oxite,codecampserver等开源项目......但是它们都没有真正解决缩小我的控制器的问题.我想避免传递很多HTTPContext的东西,但也许这是不可能的.
还有其他一些项目,我可以看到的最佳实践吗?我正在构建一个大型工作流/数据输入应用程序.
感谢您的一些链接和建议
我不知道有什么真实的例子可以展示我的头脑,因为我想我是根据我通过浏览 SO 找到的随机问题和答案想出了我的 MVC 应用程序的控制器 -> 服务 -> 存储库分层方案。
但是,我可以给您提供一个示例,说明如何组织您列出的项目符号,使其适合我构建服务层的方式。这可能不是最好的方法,但这就是我制作大型 mvc 应用程序的方式。这应该会让您了解如何在您自己的应用程序中构建它
我的服务层为每个业务单元组合了一个服务类。因此,如果我的应用程序有项目,并且每个项目都有一个人,我将有一个 ProjectService 类和一个 PersonService 类。
根据您对控制器如何工作的描述,我的控制器的操作按以下方式工作。
1) 获取当前用户的信息并调用相应服务类的授权方法。因此,如果用户尝试修改项目的详细信息,我会将用户 ID 和项目 ID 传递给 ProjectService 的 AuthorizeUser 方法。这意味着,如果我更改为项目授权用户的方式,我只需更改授权方法,而不是每个控制器。
2)Viewmodel在服务层创建、保存和销毁。服务层获取视图模型,对其进行验证(如果失败,则引发异常或验证结果),然后将其转换为数据对象,然后将其传递到存储库进行保存。它还从存储库请求数据对象,将其转换为视图模型并将其返回到控制器。
3) 所有操作的记录都发生在服务层。这可以根据所呈现的操作自动进行(尝试将对象保存到数据库),或者您的控制器可以显式调用服务层来记录操作。
这样做的全部目的是将通用功能整合到易于维护的层中。如果您更改视图模型转换为 DTO 的方式,则很容易知道在哪里进行更改并进行一次更改。如果您需要更改日志记录、用户访问权限,或者即使您想更改从存储库检索某些数据的方式,这是一个简单的更改区域,而不必寻找所有控制器并直接修改它们。
编辑:这使得控制器很小,因为它们实际上只包含对服务层的一些调用,仅此而已(授权、执行操作、显示视图)。结束编辑
最后,asp.net 网站有一个在服务层中执行验证的教程。该教程可以在这里找到。
归档时间: |
|
查看次数: |
1050 次 |
最近记录: |