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 |
||
19 | class XmlBuilder implements XmlBuilderInterface |
||
20 | { |
||
21 | /** |
||
22 | * Имя корневого тега по умолчанию |
||
23 | * |
||
24 | * @var string |
||
25 | */ |
||
26 | protected $defaultRootName = 'result'; |
||
27 | |||
28 | /** |
||
29 | * Имя тега являющегося контейнером для сущности |
||
30 | * |
||
31 | * @var string |
||
32 | */ |
||
33 | protected $xmlEntryName = 'entry'; |
||
34 | |||
35 | /** |
||
36 | * Xpath запрос для получения вложенных сущностей |
||
37 | * |
||
38 | * @var string |
||
39 | */ |
||
40 | protected $childEntryQuery; |
||
41 | |||
42 | /** |
||
43 | * Ключем является хеш SimpleXMLElement, а значением закешированные данные |
||
44 | * |
||
45 | * @var array |
||
46 | */ |
||
47 | protected $itemNodeUuidToCacheData = []; |
||
48 | |||
49 | /** |
||
50 | * Имя атрибута для того что бы связать SimpleXMLElement и контейнер с данными |
||
51 | * |
||
52 | * @var string |
||
53 | */ |
||
54 | protected $defaultUuidAttribute = '____UUID____'; |
||
55 | |||
56 | /** |
||
57 | * Определяет есть ли готовые данные для данного элемента |
||
58 | * |
||
59 | * @param SimpleXMLElement $resource |
||
60 | * |
||
61 | * @return boolean |
||
62 | * @throws \Nnx\JmsSerializerModule\DataContainerBuilder\Exception\RuntimeException |
||
63 | */ |
||
64 | public function hasDataInCache(SimpleXMLElement $resource) |
||
72 | |||
73 | /** |
||
74 | * Возвращает контейнер с данными из кеша |
||
75 | * |
||
76 | * @param SimpleXMLElement $resource |
||
77 | * |
||
78 | * @return DataContainer\DataContainerInterface |
||
79 | * @throws \Nnx\JmsSerializerModule\DataContainerBuilder\Exception\RuntimeException |
||
80 | */ |
||
81 | View Code Duplication | public function getDataContainerFromCache(SimpleXMLElement $resource) |
|
91 | |||
92 | /** |
||
93 | * Возвращает контейнер с данными для сущности |
||
94 | * |
||
95 | * @param SimpleXMLElement $resource |
||
96 | * |
||
97 | * @return DataContainer\EntityInterface |
||
98 | * @throws \Nnx\JmsSerializerModule\DataContainerBuilder\Exception\RuntimeException |
||
99 | */ |
||
100 | View Code Duplication | public function getEntityFromCache(SimpleXMLElement $resource) |
|
110 | |||
111 | /** |
||
112 | * Подготавливает нормализованный контейнер с данными на основе узла SimpleXMLElement |
||
113 | * |
||
114 | * @param SimpleXMLElement $resource |
||
115 | * |
||
116 | * @return DataContainer\DataContainerInterface |
||
117 | * @throws \Nnx\JmsSerializerModule\DataContainerBuilder\Exception\RuntimeException |
||
118 | * @throws \Nnx\JmsSerializerModule\DataContainerBuilder\XmlBuilder\Exception\InvalidParserContextException |
||
119 | * @throws \Nnx\JmsSerializerModule\DataContainer\Exception\InvalidArgumentException |
||
120 | * @throws Exception\InvalidResourceException |
||
121 | */ |
||
122 | public function loadDataFromResource(SimpleXMLElement $resource) |
||
152 | |||
153 | |||
154 | /** |
||
155 | * Обработка набора узлов xml документа, в которых описываются данные для сущности |
||
156 | * |
||
157 | * @param XmlBuilder\ParserContext $context |
||
158 | * |
||
159 | * @return DataContainer\DataContainerInterface |
||
160 | * @throws \Nnx\JmsSerializerModule\DataContainerBuilder\Exception\RuntimeException |
||
161 | * @throws \Nnx\JmsSerializerModule\DataContainer\Exception\InvalidArgumentException |
||
162 | * @throws \Nnx\JmsSerializerModule\DataContainerBuilder\XmlBuilder\Exception\InvalidParserContextException |
||
163 | * |
||
164 | */ |
||
165 | protected function parseItem(XmlBuilder\ParserContext $context) |
||
260 | |||
261 | /** |
||
262 | * Определяет есть ли uuid атрибут у элемента |
||
263 | * |
||
264 | * @param SimpleXMLElement $itemNode |
||
265 | * |
||
266 | * @return bool |
||
267 | */ |
||
268 | public function hasUuidAttribute(SimpleXMLElement $itemNode) |
||
274 | |||
275 | |||
276 | /** |
||
277 | * Определяет есть ли uuid атрибут у элемента |
||
278 | * |
||
279 | * @param SimpleXMLElement $itemNode |
||
280 | * |
||
281 | * @return string |
||
282 | * @throws \Nnx\JmsSerializerModule\DataContainerBuilder\Exception\RuntimeException |
||
283 | */ |
||
284 | public function getUuidAttribute(SimpleXMLElement $itemNode) |
||
294 | |||
295 | /** |
||
296 | * Генерирует uuid атррибут |
||
297 | * |
||
298 | * @param SimpleXMLElement $itemNode |
||
299 | * |
||
300 | * @return SimpleXMLElement |
||
301 | * @throws \Nnx\JmsSerializerModule\DataContainerBuilder\Exception\RuntimeException |
||
302 | */ |
||
303 | public function generateUuid(SimpleXMLElement $itemNode) |
||
316 | |||
317 | /** |
||
318 | * Возвращает имя корневого тега по умолчанию |
||
319 | * |
||
320 | * @return string |
||
321 | */ |
||
322 | public function getDefaultRootName() |
||
326 | |||
327 | /** |
||
328 | * Устанавливает имя корневого тега по умолчанию |
||
329 | * |
||
330 | * @param string $defaultRootName |
||
331 | * |
||
332 | * @return $this |
||
333 | */ |
||
334 | public function setDefaultRootName($defaultRootName) |
||
340 | |||
341 | /** |
||
342 | * Возвращает имя тега являющегося контейнером для сущности |
||
343 | * |
||
344 | * @return string |
||
345 | */ |
||
346 | public function getXmlEntryName() |
||
350 | |||
351 | /** |
||
352 | * Устанавливает имя тега являющегося контейнером для сущности |
||
353 | * |
||
354 | * @param string $xmlEntryName |
||
355 | * |
||
356 | * @return $this |
||
357 | */ |
||
358 | public function setXmlEntryName($xmlEntryName) |
||
364 | |||
365 | /** |
||
366 | * Возвращает Xpath запрос для получения вложенных сущностей |
||
367 | * |
||
368 | * @return string |
||
369 | */ |
||
370 | public function getChildEntryQuery() |
||
378 | |||
379 | /** |
||
380 | * Возвращает имя атрибута для того что бы связать SimpleXMLElement и контейнер с данными |
||
381 | * |
||
382 | * @return string |
||
383 | */ |
||
384 | public function getDefaultUuidAttribute() |
||
388 | |||
389 | /** |
||
390 | * Устанавливает имя атрибута для того что бы связать SimpleXMLElement и контейнер с данными |
||
391 | * |
||
392 | * @param string $defaultUuidAttribute |
||
393 | * |
||
394 | * @return $this |
||
395 | */ |
||
396 | public function setDefaultUuidAttribute($defaultUuidAttribute) |
||
402 | } |
||
403 |
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.