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 | 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.