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 |
||
28 | class GenericResource implements PuliResource |
||
29 | { |
||
30 | /** |
||
31 | * @var ResourceRepository |
||
32 | */ |
||
33 | private $repo; |
||
34 | |||
35 | /** |
||
36 | * @var string |
||
37 | */ |
||
38 | private $path; |
||
39 | |||
40 | /** |
||
41 | * @var string |
||
42 | */ |
||
43 | private $repoPath; |
||
44 | |||
45 | /** |
||
46 | * Creates a new resource. |
||
47 | * |
||
48 | * @param string|null $path The path of the resource. |
||
49 | */ |
||
50 | 754 | public function __construct($path = null) |
|
55 | |||
56 | /** |
||
57 | * {@inheritdoc} |
||
58 | */ |
||
59 | 336 | public function getPath() |
|
63 | |||
64 | /** |
||
65 | * {@inheritdoc} |
||
66 | */ |
||
67 | 317 | public function getName() |
|
71 | |||
72 | /** |
||
73 | * {@inheritdoc} |
||
74 | */ |
||
75 | 4 | View Code Duplication | public function getChild($relPath) |
83 | |||
84 | /** |
||
85 | * {@inheritdoc} |
||
86 | */ |
||
87 | 3 | public function hasChild($relPath) |
|
95 | |||
96 | /** |
||
97 | * {@inheritdoc} |
||
98 | */ |
||
99 | 3 | public function hasChildren() |
|
107 | |||
108 | /** |
||
109 | * {@inheritdoc} |
||
110 | */ |
||
111 | 6 | View Code Duplication | public function listChildren() |
125 | |||
126 | /** |
||
127 | * {@inheritdoc} |
||
128 | */ |
||
129 | public function getStack() |
||
137 | |||
138 | /** |
||
139 | * {@inheritdoc} |
||
140 | */ |
||
141 | public function getMetadata() |
||
145 | |||
146 | /** |
||
147 | * {@inheritdoc} |
||
148 | */ |
||
149 | 621 | public function attachTo(ResourceRepository $repo, $path = null) |
|
158 | |||
159 | /** |
||
160 | * {@inheritdoc} |
||
161 | */ |
||
162 | 25 | public function detach() |
|
166 | |||
167 | /** |
||
168 | * {@inheritdoc} |
||
169 | */ |
||
170 | 264 | public function getRepository() |
|
174 | |||
175 | /** |
||
176 | * {@inheritdoc} |
||
177 | */ |
||
178 | 142 | public function getRepositoryPath() |
|
182 | |||
183 | /** |
||
184 | * {@inheritdoc} |
||
185 | */ |
||
186 | 581 | public function isAttached() |
|
190 | |||
191 | /** |
||
192 | * {@inheritdoc} |
||
193 | */ |
||
194 | 56 | public function createReference($path) |
|
201 | |||
202 | /** |
||
203 | * {@inheritdoc} |
||
204 | */ |
||
205 | 84 | public function isReference() |
|
209 | |||
210 | /** |
||
211 | * {@inheritdoc} |
||
212 | */ |
||
213 | 27 | public function serialize() |
|
221 | |||
222 | /** |
||
223 | * {@inheritdoc} |
||
224 | */ |
||
225 | 27 | public function unserialize($string) |
|
231 | |||
232 | /** |
||
233 | * Invoked before serializing a resource. |
||
234 | * |
||
235 | * Override this method if you want to serialize custom data in subclasses. |
||
236 | * |
||
237 | * @param array $data The data to serialize. Add custom data at the end of |
||
238 | * the array. |
||
239 | */ |
||
240 | 27 | protected function preSerialize(array &$data) |
|
245 | |||
246 | /** |
||
247 | * Invoked after unserializing a resource. |
||
248 | * |
||
249 | * Override this method if you want to unserialize custom data in |
||
250 | * subclasses. |
||
251 | * |
||
252 | * @param array $data The unserialized data. Pop your custom data from the |
||
253 | * end of the array before calling the parent method. |
||
254 | */ |
||
255 | 27 | protected function postUnserialize(array $data) |
|
260 | } |
||
261 |