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:
Complex classes like ControllerBase often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use ControllerBase, and based on these observations, apply Extract Interface, too.
| 1 | <?php |
||
| 10 | class ControllerBase extends Controller |
||
|
|
|||
| 11 | { |
||
| 12 | |||
| 13 | protected $model; |
||
| 14 | protected $title; |
||
| 15 | protected $controller; |
||
| 16 | protected $messageTimerInterval = 3000; |
||
| 17 | |||
| 18 | public function afterExecuteRoute($dispatcher) |
||
| 25 | |||
| 26 | public function frmAction(){ |
||
| 29 | |||
| 30 | public function indexAction($message = NULL) |
||
| 49 | |||
| 50 | public function getInstance($id = NULL) |
||
| 60 | |||
| 61 | View Code Duplication | public function readAction($id = NULL) |
|
| 73 | |||
| 74 | |||
| 75 | protected function setValuesToObject(&$object) |
||
| 79 | |||
| 80 | |||
| 81 | public function updateAction() |
||
| 108 | |||
| 109 | //PErmet l'édition d'un seul champ à la fois |
||
| 110 | public function soloUpdateAction() |
||
| 124 | |||
| 125 | |||
| 126 | View Code Duplication | public function deleteAction($id = null) |
|
| 135 | |||
| 136 | public function asAdminAction() |
||
| 142 | |||
| 143 | public function asUserAction() |
||
| 149 | |||
| 150 | public function logoutAction() |
||
| 155 | |||
| 156 | public function loadAclAction($typeUser) { |
||
| 186 | |||
| 187 | public function verifyAccessAction($activeResource, $activeOperation) { |
||
| 202 | |||
| 203 | |||
| 204 | public function moreAction(){ |
||
| 207 | |||
| 208 | /** |
||
| 209 | * Affiche un message Alert bootstrap |
||
| 210 | * @param DisplayedMessage $message |
||
| 211 | */ |
||
| 212 | public function _showDisplayedMessage($message) |
||
| 216 | |||
| 217 | /** |
||
| 218 | * Affiche un message Alert bootstrap |
||
| 219 | * @param string $message texte du message |
||
| 220 | * @param string $type type du message (info, success, warning ou danger) |
||
| 221 | * @param number $timerInterval durée en millisecondes d'affichage du message (0 pour que le message reste affiché) |
||
| 222 | * @param string $dismissable si vrai, l'alert dispose d'une croix de fermeture |
||
| 223 | */ |
||
| 224 | public function _showMessage($message, $type = "success", $timerInterval = 0, $dismissable = true, $visible = true) |
||
| 229 | |||
| 230 | |||
| 231 | public function messageSuccess($message, $timerInterval = 0, $dismissable = true) |
||
| 235 | |||
| 236 | /** |
||
| 237 | * Affiche un message Alert bootstrap de type warning |
||
| 238 | * @param string $message texte du message |
||
| 239 | * @param number $timerInterval durée en millisecondes d'affichage du message (0 pour que le message reste affiché) |
||
| 240 | * @param string $dismissable si vrai, l'alert dispose d'une croix de fermeture |
||
| 241 | */ |
||
| 242 | public function messageWarning($message, $timerInterval = 0, $dismissable = true) |
||
| 246 | |||
| 247 | /** |
||
| 248 | * Affiche un message Alert bootstrap de type danger |
||
| 249 | * @param string $message texte du message |
||
| 250 | * @param number $timerInterval durée en millisecondes d'affichage du message (0 pour que le message reste affiché) |
||
| 251 | * @param string $dismissable si vrai, l'alert dispose d'une croix de fermeture |
||
| 252 | */ |
||
| 253 | public function messageDanger($message, $timerInterval = 0, $dismissable = true) |
||
| 257 | |||
| 258 | /** |
||
| 259 | * Affiche un message Alert bootstrap de type info |
||
| 260 | * @param string $message texte du message |
||
| 261 | * @param number $timerInterval durée en millisecondes d'affichage du message (0 pour que le message reste affiché) |
||
| 262 | * @param string $dismissable si vrai, l'alert dispose d'une croix de fermeture |
||
| 263 | */ |
||
| 264 | public function messageInfo($message, $timerInterval = 0, $dismissable = true) |
||
| 268 | |||
| 269 | |||
| 270 | public function isAdmin($userId){ |
||
| 278 | |||
| 279 | public function isActual($user){ |
||
| 286 | |||
| 287 | public function isAdminAndActual($user){ |
||
| 294 | } |
||
| 295 |
You can fix this by adding a namespace to your class:
When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.