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 |
||
| 17 | class ActionUtils |
||
| 18 | { |
||
| 19 | const ID_PATTERN = '[a-zA-Z0-9\-_\/\+\040\'\.]+'; |
||
| 20 | |||
| 21 | /** |
||
| 22 | * Get route for GET requests |
||
| 23 | * |
||
| 24 | * @param string $service service id |
||
| 25 | * @param array $serviceConfig service configuration |
||
| 26 | * |
||
| 27 | * @return Route |
||
| 28 | */ |
||
| 29 | 2 | public static function getRouteGet($service, $serviceConfig) |
|
| 33 | |||
| 34 | /** |
||
| 35 | * Get Route |
||
| 36 | * |
||
| 37 | * @param string $service name of service containing controller |
||
| 38 | * @param string $method HTTP method to generate route for |
||
| 39 | * @param string $action action to call for route |
||
| 40 | * @param array $serviceConfig service configuration |
||
| 41 | * @param array $parameters route parameters to append to route as pair of name and patterns |
||
| 42 | * |
||
| 43 | * @return Route |
||
| 44 | */ |
||
| 45 | 2 | private static function getRoute($service, $method, $action, $serviceConfig, $parameters = array()) |
|
| 65 | |||
| 66 | /** |
||
| 67 | * Get entity name from service strings. |
||
| 68 | * |
||
| 69 | * By convention the last part of the service string so far |
||
| 70 | * makes up the entities name. |
||
| 71 | * |
||
| 72 | * @param string $service (partial) service id |
||
| 73 | * @param array $serviceConfig service configuration |
||
| 74 | * |
||
| 75 | * @return string |
||
| 76 | */ |
||
| 77 | 2 | private static function getBaseFromService($service, $serviceConfig) |
|
| 92 | |||
| 93 | /** |
||
| 94 | * Get route for getAll requests |
||
| 95 | * |
||
| 96 | * @param string $service service id |
||
| 97 | * @param array $serviceConfig service configuration |
||
| 98 | * |
||
| 99 | * @return Route |
||
| 100 | */ |
||
| 101 | 2 | public static function getRouteAll($service, $serviceConfig) |
|
| 105 | |||
| 106 | /** |
||
| 107 | * Get route for POST requests |
||
| 108 | * |
||
| 109 | * @param string $service service id |
||
| 110 | * @param array $serviceConfig service configuration |
||
| 111 | * |
||
| 112 | * @return Route |
||
| 113 | */ |
||
| 114 | 2 | public static function getRoutePost($service, $serviceConfig) |
|
| 118 | |||
| 119 | /** |
||
| 120 | * Get route for PUT requests |
||
| 121 | * |
||
| 122 | * @param string $service service id |
||
| 123 | * @param array $serviceConfig service configuration |
||
| 124 | * |
||
| 125 | * @return Route |
||
| 126 | */ |
||
| 127 | 2 | public static function getRoutePut($service, $serviceConfig) |
|
| 131 | |||
| 132 | /** |
||
| 133 | * Get route for PATCH requests |
||
| 134 | * |
||
| 135 | * @param string $service service id |
||
| 136 | * @param array $serviceConfig service configuration |
||
| 137 | * |
||
| 138 | * @return Route |
||
| 139 | */ |
||
| 140 | 2 | public static function getRoutePatch($service, $serviceConfig) |
|
| 144 | |||
| 145 | /** |
||
| 146 | * Get route for DELETE requests |
||
| 147 | * |
||
| 148 | * @param string $service service id |
||
| 149 | * @param array $serviceConfig service configuration |
||
| 150 | * |
||
| 151 | * @return Route |
||
| 152 | */ |
||
| 153 | 2 | public static function getRouteDelete($service, $serviceConfig) |
|
| 157 | |||
| 158 | /** |
||
| 159 | * Get route for OPTIONS requests |
||
| 160 | * |
||
| 161 | * @param string $service service id |
||
| 162 | * @param array $serviceConfig service configuration |
||
| 163 | * @param array $parameters service params |
||
| 164 | * @param boolean $useIdPattern generate route with id param |
||
| 165 | * |
||
| 166 | * @return Route |
||
| 167 | */ |
||
| 168 | 2 | View Code Duplication | public static function getRouteOptions($service, $serviceConfig, array $parameters = array(), $useIdPattern = false) |
| 175 | |||
| 176 | /** |
||
| 177 | * Get route for HEAD requests |
||
| 178 | * |
||
| 179 | * @param string $service service id |
||
| 180 | * @param array $serviceConfig service configuration |
||
| 181 | * @param array $parameters service params |
||
| 182 | * @param boolean $useIdPattern generate route with id param |
||
| 183 | * |
||
| 184 | * @return Route |
||
| 185 | */ |
||
| 186 | 2 | View Code Duplication | public static function getRouteHead($service, $serviceConfig, array $parameters = array(), $useIdPattern = false) |
| 193 | |||
| 194 | /** |
||
| 195 | * Get canonical route for schema requests |
||
| 196 | * |
||
| 197 | * @param string $service service id |
||
| 198 | * @param array $serviceConfig service configuration |
||
| 199 | * @param string $type service type (item or collection) |
||
| 200 | * @param boolean $option render a options route |
||
| 201 | * |
||
| 202 | * @return Route |
||
| 203 | */ |
||
| 204 | 2 | public static function getCanonicalSchemaRoute($service, $serviceConfig, $type = 'item', $option = false) |
|
| 226 | } |
||
| 227 |
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.