如何处理具有许多依赖关系的函数[关闭]

问题描述 投票:1回答:1

我有一个依赖于许多其他类的方法

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()方法真的需要所有这些依赖关系,那么解决这个问题的最佳实践是什么?

php dependency-injection dependencies
1个回答
3
投票

您遇到的代码气味称为Constructor over-injection(这种特殊的变化是方法过度注入)。正如@Nkosi在评论中所说,这是一个Single Responsibility Principle违规的来源。

然而,如何解决这个问题在很大程度上取决于具体情况。 Chapter 6书中的Dependency Injection: Principles, Practices, Patterns实际上包含了对你的选择的非常精细的描述。简而言之,您可以使用以下重构:

© www.soinside.com 2019 - 2024. All rights reserved.