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 |
||
53 | class ProviderService implements IProviderService { |
||
54 | |||
55 | |||
56 | /** @var AppManager */ |
||
57 | private $appManager; |
||
58 | |||
59 | /** @var ConfigService */ |
||
60 | private $configService; |
||
61 | |||
62 | /** @var MiscService */ |
||
63 | private $miscService; |
||
64 | |||
65 | /** @var ProviderWrapper[] */ |
||
66 | private $providers = []; |
||
67 | |||
68 | /** @var bool */ |
||
69 | private $providersLoaded = false; |
||
70 | |||
71 | |||
72 | /** |
||
73 | * ProviderService constructor. |
||
74 | * |
||
75 | * @param AppManager $appManager |
||
76 | * @param ConfigService $configService |
||
77 | * @param MiscService $miscService |
||
78 | */ |
||
79 | public function __construct( |
||
86 | |||
87 | |||
88 | /** |
||
89 | * Load all FullTextSearchProviders set in any info.xml file |
||
90 | * |
||
91 | * @throws Exception |
||
92 | */ |
||
93 | View Code Duplication | private function loadProviders() { |
|
109 | |||
110 | |||
111 | /** |
||
112 | * @param string $appId |
||
113 | * @param string $providerId |
||
114 | * |
||
115 | * @throws ProviderIsNotCompatibleException |
||
116 | * @throws ProviderIsNotUniqueException |
||
117 | * @throws QueryException |
||
118 | */ |
||
119 | public function loadProvider(string $appId, string $providerId) { |
||
138 | |||
139 | |||
140 | /** |
||
141 | * @return ProviderWrapper[] |
||
142 | * @throws Exception |
||
143 | */ |
||
144 | public function getProviders(): array { |
||
149 | |||
150 | /** |
||
151 | * @return IFullTextSearchProvider[] |
||
152 | * @throws Exception |
||
153 | */ |
||
154 | public function getConfiguredProviders(): array { |
||
167 | |||
168 | |||
169 | /** |
||
170 | * @param array $providerList |
||
171 | * |
||
172 | * @return IFullTextSearchProvider[] |
||
173 | * @throws Exception |
||
174 | * @throws ProviderDoesNotExistException |
||
175 | */ |
||
176 | public function getFilteredProviders(array $providerList): array { |
||
194 | |||
195 | |||
196 | /** |
||
197 | * @param string $providerId |
||
198 | * |
||
199 | * @return ProviderWrapper |
||
200 | * @throws Exception |
||
201 | * @throws ProviderDoesNotExistException |
||
202 | */ |
||
203 | public function getProvider(string $providerId): ProviderWrapper { |
||
215 | |||
216 | |||
217 | /** |
||
218 | * @param string $providerId |
||
219 | * |
||
220 | * @return bool |
||
221 | */ |
||
222 | public function isProviderIndexed(string $providerId): bool { |
||
238 | |||
239 | |||
240 | /** |
||
241 | * @param IFullTextSearchProvider $provider |
||
242 | * @param bool $boolean |
||
243 | */ |
||
244 | public function setProviderAsIndexed(IFullTextSearchProvider $provider, bool $boolean) { |
||
249 | |||
250 | |||
251 | /** |
||
252 | * |
||
253 | */ |
||
254 | public function setProvidersAsNotIndexed() { |
||
257 | |||
258 | |||
259 | /** |
||
260 | * @param string $appId |
||
261 | * |
||
262 | * @throws ProviderIsNotCompatibleException |
||
263 | * @throws ProviderIsNotUniqueException |
||
264 | * @throws QueryException |
||
265 | */ |
||
266 | private function loadProvidersFromApp(string $appId) { |
||
280 | |||
281 | |||
282 | /** |
||
283 | * @param string $appId |
||
284 | * @param array $providers |
||
285 | * |
||
286 | * @throws ProviderIsNotCompatibleException |
||
287 | * @throws ProviderIsNotUniqueException |
||
288 | * @throws QueryException |
||
289 | */ |
||
290 | private function loadProvidersFromList(string $appId, array $providers) { |
||
299 | |||
300 | |||
301 | /** |
||
302 | * @param IFullTextSearchProvider $provider |
||
303 | * |
||
304 | * @throws ProviderIsNotUniqueException |
||
305 | * @throws Exception |
||
306 | */ |
||
307 | private function providerIdMustBeUnique(IFullTextSearchProvider $provider) { |
||
317 | |||
318 | |||
319 | /** |
||
320 | * @param IFullTextSearchProvider[] $providers |
||
321 | * |
||
322 | * @return array |
||
323 | */ |
||
324 | public function serialize(array $providers): array { |
||
335 | |||
336 | |||
337 | /** |
||
338 | * |
||
339 | */ |
||
340 | public function addJavascriptAPI() { |
||
349 | |||
350 | |||
351 | } |
||
352 |
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.