Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
| 1 | <?php |
||
| 15 | class DefaultController extends Controller |
||
| 16 | { |
||
| 17 | /** |
||
| 18 | * @param GroupDefinitionAwareRollout $rollout |
||
| 19 | * |
||
| 20 | * @return Response |
||
| 21 | */ |
||
| 22 | public function indexAction(GroupDefinitionAwareRollout $rollout) |
||
| 26 | |||
| 27 | /** |
||
| 28 | * @param GroupDefinitionAwareRollout $rollout |
||
| 29 | * @param string $feature |
||
| 30 | * |
||
| 31 | * @return RedirectResponse |
||
| 32 | */ |
||
| 33 | public function activateAction(GroupDefinitionAwareRollout $rollout, string $feature) |
||
| 41 | |||
| 42 | /** |
||
| 43 | * @param GroupDefinitionAwareRollout $rollout |
||
| 44 | * @param string $feature |
||
| 45 | * |
||
| 46 | * @return RedirectResponse |
||
| 47 | */ |
||
| 48 | public function deactivateAction(GroupDefinitionAwareRollout $rollout, string $feature) |
||
| 56 | |||
| 57 | /** |
||
| 58 | * @param GroupDefinitionAwareRollout $rollout |
||
| 59 | * @param string $feature |
||
| 60 | * |
||
| 61 | * @return RedirectResponse |
||
| 62 | */ |
||
| 63 | public function incrementPercentageAction(GroupDefinitionAwareRollout $rollout, string $feature) |
||
| 67 | |||
| 68 | /** |
||
| 69 | * @param GroupDefinitionAwareRollout $rollout |
||
| 70 | * @param string $feature |
||
| 71 | * |
||
| 72 | * @return RedirectResponse |
||
| 73 | */ |
||
| 74 | public function decrementPercentageAction(GroupDefinitionAwareRollout $rollout, string $feature) |
||
| 78 | |||
| 79 | /** |
||
| 80 | * @param GroupDefinitionAwareRollout $rollout |
||
| 81 | * @param string $feature |
||
| 82 | * @param string $group |
||
| 83 | * |
||
| 84 | * @return RedirectResponse |
||
| 85 | */ |
||
| 86 | public function activateGroupAction(GroupDefinitionAwareRollout $rollout, string $feature, string $group) |
||
| 94 | |||
| 95 | /** |
||
| 96 | * @param GroupDefinitionAwareRollout $rollout |
||
| 97 | * @param string $feature |
||
| 98 | * @param string $group |
||
| 99 | * |
||
| 100 | * @return RedirectResponse |
||
| 101 | */ |
||
| 102 | public function deactivateGroupAction(GroupDefinitionAwareRollout $rollout, string $feature, string $group) |
||
| 110 | |||
| 111 | /** |
||
| 112 | * @param Request $request |
||
| 113 | * @param GroupDefinitionAwareRollout $rollout |
||
| 114 | * @param UserProviderInterface $userProvider |
||
| 115 | * @param string $feature |
||
| 116 | * |
||
| 117 | * @return RedirectResponse |
||
| 118 | */ |
||
| 119 | View Code Duplication | public function activateUserAction( |
|
| 145 | |||
| 146 | /** |
||
| 147 | * @param GroupDefinitionAwareRollout $rollout |
||
| 148 | * @param UserProviderInterface $userProvider |
||
| 149 | * @param string $feature |
||
| 150 | * @param string $id |
||
| 151 | * |
||
| 152 | * @return RedirectResponse |
||
| 153 | */ |
||
| 154 | View Code Duplication | public function deactivateUserAction( |
|
| 179 | |||
| 180 | /** |
||
| 181 | * @param GroupDefinitionAwareRollout $rollout |
||
| 182 | * @param string $feature |
||
| 183 | * |
||
| 184 | * @return RedirectResponse |
||
| 185 | */ |
||
| 186 | public function removeAction(GroupDefinitionAwareRollout $rollout, string $feature) |
||
| 194 | |||
| 195 | /** |
||
| 196 | * @param Request $request |
||
| 197 | * @param GroupDefinitionAwareRollout $rollout |
||
| 198 | * @param string $feature |
||
| 199 | * |
||
| 200 | * @return RedirectResponse |
||
| 201 | */ |
||
| 202 | public function setRequestParamAction(Request $request, GroupDefinitionAwareRollout $rollout, string $feature) |
||
| 218 | |||
| 219 | /** |
||
| 220 | * Abstract out common functionality |
||
| 221 | * |
||
| 222 | * @param GroupDefinitionAwareRollout $rollout |
||
| 223 | * @param string $feature |
||
| 224 | * @param int $increment |
||
| 225 | * |
||
| 226 | * @return RedirectResponse |
||
| 227 | */ |
||
| 228 | private function changePercentage(GroupDefinitionAwareRollout $rollout, string $feature, int $increment) |
||
| 237 | } |
||
| 238 |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.