服务层是否可以访问HttpContext?

Kur*_*ler 13 asp.net-mvc design-patterns

我正在构建一个大致遵循存储库模式的应用程序,其顶部是服务层,类似于Conery的MVC Storefront的早期版本.

我需要实现一个页面,返回除当前用户之外的所有用户.我已经在存储库和服务层上有GetUsers()方法,因此问题是应用"当前用户除外"的位置.

服务层是否应该知道HttpContext,从而应用此规则?我很想将当前用户(id)从控制器传递给这个服务方法,但是如果服务层能够识别HttpContext并且可以自己完成,那么它似乎更清晰.

一个明显的选择是直接在Controller中应用这个规则,但我对这个想法并不热衷......


编辑 - 只是评论答案:我看到反向依赖问题的问题,我完全忽略了.我将Mehrdad作为回答应有的选票,但每个人都真的提供了值得阅读的有价值的回应!

Meh*_*ari 19

绝对不.我在设计这类事物时的心态是这样的:我假设我需要编写一个基于Windows的应用程序以及Web应用程序,并尽量减少对Web特定内容的依赖.HttpContext直接传递会增加服务层与Web UI层的耦合,这是不理想的.


Joh*_*ers 9

答案是,.

服务层不仅不依赖于当前的表示层,我认为它应该不依赖于当前的应用程序.例如,我不会AppContextJonoW 在这里建议的那样使用自定义类.

相反,将当前用户作为参数传递给GetAllUsersExceptForTheCurrentUser方法.这样,任何需要处理用户的应用程序都可以使用该服务,而不仅仅是当前应用程序.