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 |
||
39 | class NodesController extends Controller |
||
40 | { |
||
41 | /** |
||
42 | * Displays the index page listing all nodes on the panel. |
||
43 | * |
||
44 | * @param \Illuminate\Http\Request $request |
||
45 | * @return \Illuminate\View\View |
||
46 | */ |
||
47 | View Code Duplication | public function index(Request $request) |
|
|
|||
48 | { |
||
49 | $nodes = Models\Node::with('location')->withCount('servers'); |
||
50 | |||
51 | if (! is_null($request->input('query'))) { |
||
52 | $nodes->search($request->input('query')); |
||
53 | } |
||
54 | |||
55 | return view('admin.nodes.index', ['nodes' => $nodes->paginate(25)]); |
||
56 | } |
||
57 | |||
58 | /** |
||
59 | * Displays create new node page. |
||
60 | * |
||
61 | * @param \Illuminate\Http\Request $request |
||
62 | * @return \Illuminate\View\View|\Illuminate\Http\RedirectResponse |
||
63 | */ |
||
64 | public function create(Request $request) |
||
75 | |||
76 | /** |
||
77 | * Post controller to create a new node on the system. |
||
78 | * |
||
79 | * @param \Illuminate\Http\Request $request |
||
80 | * @return \Illuminate\Http\RedirectResponse |
||
81 | */ |
||
82 | public function store(Request $request) |
||
111 | |||
112 | /** |
||
113 | * Shows the index overview page for a specific node. |
||
114 | * |
||
115 | * @param \Illuminate\Http\Request $request |
||
116 | * @param int $id |
||
117 | * @return \Illuminate\View\View |
||
118 | */ |
||
119 | public function viewIndex(Request $request, $id) |
||
145 | |||
146 | /** |
||
147 | * Shows the settings page for a specific node. |
||
148 | * |
||
149 | * @param \Illuminate\Http\Request $request |
||
150 | * @param int $id |
||
151 | * @return \Illuminate\View\View |
||
152 | */ |
||
153 | public function viewSettings(Request $request, $id) |
||
160 | |||
161 | /** |
||
162 | * Shows the configuration page for a specific node. |
||
163 | * |
||
164 | * @param \Illuminate\Http\Request $request |
||
165 | * @param int $id |
||
166 | * @return \Illuminate\View\View |
||
167 | */ |
||
168 | public function viewConfiguration(Request $request, $id) |
||
174 | |||
175 | /** |
||
176 | * Shows the allocation page for a specific node. |
||
177 | * |
||
178 | * @param \Illuminate\Http\Request $request |
||
179 | * @param int $id |
||
180 | * @return \Illuminate\View\View |
||
181 | */ |
||
182 | public function viewAllocation(Request $request, $id) |
||
193 | |||
194 | /** |
||
195 | * Shows the server listing page for a specific node. |
||
196 | * |
||
197 | * @param \Illuminate\Http\Request $request |
||
198 | * @param int $id |
||
199 | * @return \Illuminate\View\View |
||
200 | */ |
||
201 | public function viewServers(Request $request, $id) |
||
212 | |||
213 | /** |
||
214 | * Updates settings for a node. |
||
215 | * |
||
216 | * @param \Illuminate\Http\Request $request |
||
217 | * @param int $id |
||
218 | * @return \Illuminate\Http\RedirectResponse |
||
219 | */ |
||
220 | public function updateSettings(Request $request, $id) |
||
248 | |||
249 | /** |
||
250 | * Removes a single allocation from a node. |
||
251 | * |
||
252 | * @param \Illuminate\Http\Request $request |
||
253 | * @param int $node |
||
254 | * @param int $allocation |
||
255 | * @return \Illuminate\Http\Response|\Illuminate\Http\JsonResponse |
||
256 | */ |
||
257 | public function allocationRemoveSingle(Request $request, $node, $allocation) |
||
268 | |||
269 | /** |
||
270 | * Remove all allocations for a specific IP at once on a node. |
||
271 | * |
||
272 | * @param \Illuminate\Http\Request $request |
||
273 | * @param int $node |
||
274 | * @return \Illuminate\Http\RedirectResponse |
||
275 | */ |
||
276 | public function allocationRemoveBlock(Request $request, $node) |
||
287 | |||
288 | /** |
||
289 | * Sets an alias for a specific allocation on a node. |
||
290 | * |
||
291 | * @param \Illuminate\Http\Request $request |
||
292 | * @param int $node |
||
293 | * @return \Illuminate\Http\Response |
||
294 | */ |
||
295 | public function allocationSetAlias(Request $request, $node) |
||
311 | |||
312 | /** |
||
313 | * Creates new allocations on a node. |
||
314 | * |
||
315 | * @param \Illuminate\Http\Request $request |
||
316 | * @param int $node |
||
317 | * @return \Illuminate\Http\RedirectResponse |
||
318 | */ |
||
319 | public function createAllocation(Request $request, $node) |
||
337 | |||
338 | /** |
||
339 | * Deletes a node from the system. |
||
340 | * |
||
341 | * @param \Illuminate\Http\Request $request |
||
342 | * @param int $id |
||
343 | * @return \Illuminate\Http\RedirectResponse |
||
344 | */ |
||
345 | View Code Duplication | public function delete(Request $request, $id) |
|
363 | |||
364 | /** |
||
365 | * Returns the configuration token to auto-deploy a node. |
||
366 | * |
||
367 | * @param \Illuminate\Http\Request $request |
||
368 | * @param int $id |
||
369 | * @return \Illuminate\Http\JsonResponse |
||
370 | */ |
||
371 | public function setToken(Request $request, $id) |
||
380 | } |
||
381 |
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.