java - 为什么在 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 个方法。通常认为,大量依赖意味着代码违反了单一职责原则。但是在这里,这个控制器负责一个用户旅程(比如注册到我的网站)。这种设计的其他缺点是什么?另外,希望对替代方案提出建议。
解决方案
可能你的课做的太多了,但我真的不能说没有看到它的内容。所以我只谈谈我在这里看到的构造函数签名。
传入所有这些变量是依赖注入的一种形式,这通常是一种很好的设计模式。但是必须以正确的顺序单独输入所有这些,使得构建这个类成为一场噩梦。
这是构建器模式的一个很好的用例。与其采用单独的参数,不如定义另一个类ControllerSettings
或ControllerComponents
将这些组件中的每一个作为属性。使用该类将所有必需的组件拼凑在一起,即。构建配置。
然后你的Controller
类的构造函数接受一个参数,它是一个ControllerSettings
实例(或者理想情况下是一个由该实例实现的接口)。
推荐阅读
- python - AttributeError:模块“张量板”没有属性“懒惰”
- php - 在多个 PHP 脚本中引用连接文件
- java.util.concurrent - 为什么在In AbstractQueuedSynchronizer中tryAcquire失败后会调用acquireQueued?
- java - 从谷歌助手等语音命令启动安卓应用
- java - 如何将 SQL 转换为 JPQL (Spring Boot)
- c# - 不支持记录集 findfirst 操作
- javascript - 状态更新时React Component不会重新渲染
- mysql - 根据特定条件根据最近的 ID 筛选器选择最新行
- c - 日期/时间转换为 C 中的 time_t
- angular - CORS 发布 Ionic 4、WordPress 5.2 和 JWT 身份验证