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 |
||
10 | class CmsComponent extends BaseComponent |
||
11 | { |
||
12 | /** |
||
13 | * @var \CloudControl\Cms\storage\Storage |
||
14 | */ |
||
15 | public $storage; |
||
16 | |||
17 | public $subTemplate = null; |
||
18 | |||
19 | |||
20 | /** |
||
21 | * @param Storage $storage |
||
22 | * |
||
23 | * @return void |
||
24 | */ |
||
25 | public function run(Storage $storage) |
||
42 | |||
43 | /** |
||
44 | * See if a user is logged or wants to log in and |
||
45 | * takes appropriate actions. |
||
46 | * |
||
47 | * @throws \Exception |
||
48 | */ |
||
49 | protected function checkLogin() |
||
61 | |||
62 | /** |
||
63 | * Overrides normal behaviour and only renders the |
||
64 | * login screen |
||
65 | * |
||
66 | * @throws \Exception |
||
67 | */ |
||
68 | protected function showLogin() |
||
75 | |||
76 | /** |
||
77 | * As an exception, to keep the initial file structure simple |
||
78 | * the cms implements it's own routing, apart from the regular sitemap functionality |
||
79 | * |
||
80 | * @throws \Exception |
||
81 | */ |
||
82 | protected function routing() |
||
91 | |||
92 | /** |
||
93 | * @param $remoteAddress |
||
94 | * |
||
95 | * @throws \Exception |
||
96 | */ |
||
97 | View Code Duplication | private function checkWhiteList($remoteAddress) |
|
107 | |||
108 | /** |
||
109 | * @param $remoteAddress |
||
110 | * |
||
111 | * @throws \Exception |
||
112 | */ |
||
113 | View Code Duplication | private function checkBlackList($remoteAddress) |
|
123 | |||
124 | /** |
||
125 | * @param $request |
||
126 | * |
||
127 | * @return mixed|string |
||
128 | */ |
||
129 | private function getRelativeCmsUri($request) |
||
140 | |||
141 | /** |
||
142 | * @param $parameterName |
||
143 | * @param $parameterValue |
||
144 | */ |
||
145 | public function setParameter($parameterName, $parameterValue) |
||
149 | |||
150 | /** |
||
151 | * @param $parameterName |
||
152 | * @return mixed |
||
153 | */ |
||
154 | public function getParameter($parameterName) |
||
158 | |||
159 | /** |
||
160 | * @throws \Exception |
||
161 | */ |
||
162 | protected function renderBody() |
||
168 | |||
169 | /** |
||
170 | * @param Crypt $crypt |
||
171 | * @param Request $request |
||
172 | */ |
||
173 | protected function invalidCredentials($crypt, $request) |
||
179 | |||
180 | /** |
||
181 | * @param $user |
||
182 | * @param Crypt $crypt |
||
183 | * @param Request $request |
||
184 | */ |
||
185 | protected function checkPassword($user, $crypt, $request) |
||
200 | |||
201 | /** |
||
202 | * @param $request |
||
203 | */ |
||
204 | protected function checkLoginAttempt($request) |
||
214 | |||
215 | /** |
||
216 | * @param $template |
||
217 | * @param null $application |
||
218 | * @return string |
||
219 | */ |
||
220 | protected function getTemplateDir($template, $application = null) |
||
224 | |||
225 | |||
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.