我有一个依赖于许多其他类的方法
public function getProfileData(
ProfilesService $profile_service,
ContactInfoService $contact_info_service,
CoursesService $courses_service,
InterestsService $interests_service,
LanguagesService $languages_service,
PersonalInfoService $personal_info_service,
ProjectsService $projects_service,
SkillsService $skills_service,
AwardsService $awards_service,
EducationsService $education_service,
ExperiencesService $experiences_service,
TargetJobsService $target_jobs_service,
ProfileHiddenSectionsService $hidden_sections_service) { }
我读到了关于依赖注入的问题,我知道如果你超过6-10个依赖关系,它会引导你产生代码味道。
但是这个getProfileData()
方法真的需要所有这些依赖关系,那么解决这个问题的最佳实践是什么?
您遇到的代码气味称为Constructor over-injection(这种特殊的变化是方法过度注入)。正如@Nkosi在评论中所说,这是一个Single Responsibility Principle违规的来源。
然而,如何解决这个问题在很大程度上取决于具体情况。 Chapter 6书中的Dependency Injection: Principles, Practices, Patterns实际上包含了对你的选择的非常精细的描述。简而言之,您可以使用以下重构: