Asp.net mvc 一个服务应该被提供给另一个服务,还是呼叫者应该获得额外的责任?

Asp.net mvc 一个服务应该被提供给另一个服务,还是呼叫者应该获得额外的责任?,asp.net-mvc,abstraction,coupling,Asp.net Mvc,Abstraction,Coupling,我的项目中有两个类(使用ASP.NET MVC):AuthenticationService和ProfileService。 当新用户在我的站点注册时,身份验证控制器的注册操作调用IAAuthenticationService中的注册方法,该方法根据接口所引用的具体身份验证模块(注入控制器的构造函数)为用户创建身份验证记录。 作为注册过程的一部分,将为用户创建一个配置文件记录,该记录是通过在注入的IProfileService上调用CreateProfile(user)创建的 目前控制器正在调用

我的项目中有两个类(使用ASP.NET MVC):AuthenticationService和ProfileService。 当新用户在我的站点注册时,身份验证控制器的注册操作调用IAAuthenticationService中的注册方法,该方法根据接口所引用的具体身份验证模块(注入控制器的构造函数)为用户创建身份验证记录。 作为注册过程的一部分,将为用户创建一个配置文件记录,该记录是通过在注入的IProfileService上调用CreateProfile(user)创建的

目前控制器正在调用这两个服务,但我喜欢我的控制器执行尽可能少的业务逻辑的想法。我想知道除了让身份验证服务知道配置文件服务之外,我是否还有其他选择,这反过来又需要IAAuthenticationService的任何未来实现知道调用CreateProfile?我忍不住觉得到处都是代码味道

另一种可能是让第三个服务{I,}RegistrationService负责逻辑


处理这种情况的推荐或首选方法是什么?谢谢

我喜欢第三种方法。我的应用程序中也有类似的情况,控制器需要多个域级别的服务来执行任务,而控制器的代码有点冗长。特别是,我有一个允许上传照片的事件管理系统。除了存储库和IAuthService之外,物理存储由IFileSystem处理(我们可以在本地和S3之间切换)、IThumbnailer处理图像、IBackgroundTask处理扫描/清理


我开始做的是在域服务之外创建应用程序服务来处理这个责任,这样容器现在只主要注入应用程序服务(在您的情况下是选项3)

我将使用{i}注册服务,它依赖于IAAuthenticationService和IProfile服务


作为一项规则,我的目标是每个控制器都有一个单一的服务依赖项。如果控制器的任务是注册用户和创建配置文件,那又有什么问题呢?控制器可以调用多个服务。控制器是有用途的,它不必是非常精细的


不过,为常规注册创建第三个控制器,使用对身份验证和概要文件的接口引用可能是更好的方法。然后身份验证和配置文件就不耦合了。

我想这就是我要做的,将注册过程提取到一个单独的服务({I}RegistrationService)中。看起来更干净。谢谢