首页 > 解决方案 > 为什么在 Rest 控制器中有太多的参数和方法是不好的?

问题描述

我有一个控制器来处理用户在我的网站上的第一次旅程(忽略以下依赖项的名称,它们是随机的)

@RestController
class Controller(
        private val fooComponent: FooComponent,
        private val dataComponent: DataComponent,
        private val userComponent: UserComponent,
        private val restComponent: RestComponent,
        private val calcComponent: CalcComponent,
        private val studentComponent: StudentComponent,
        private val tampComponent: TampComponent,
        private val checkComponent: CheckComponent,
        private val trialComponent: TrialComponent,
        private val reviewComponent: ReviewComponent,
        private val helpComponent: HelpComponent,
        private val achievementComponent: AchievementComponent,
        private val glassComponent: GlassComponent
) 

如您所见,这个控制器层有很多依赖关系,其中也有 50 个方法。通常认为,大量依赖意味着代码违反了单一职责原则。但是在这里,这个控制器负责一个用户旅程(比如注册到我的网站)。这种设计的其他缺点是什么?另外,希望对替代方案提出建议。

标签: javaspring-bootkotlincontrollersingle-responsibility-principle

解决方案


可能你的课做的太多了,但我真的不能说没有看到它的内容。所以我只谈谈我在这里看到的构造函数签名。

传入所有这些变量是依赖注入的一种形式,这通常是一种很好的设计模式。但是必须以正确的顺序单独输入所有这些,使得构建这个类成为一场噩梦。

这是构建器模式的一个很好的用例。与其采用单独的参数,不如定义另一个类ControllerSettingsControllerComponents将这些组件中的每一个作为属性。使用该类将所有必需的组件拼凑在一起,即。构建配置。

然后你的Controller类的构造函数接受一个参数,它是一个ControllerSettings实例(或者理想情况下是一个由该实例实现的接口)。


推荐阅读