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 |
||
24 | View Code Duplication | final class Pubsub implements Api |
|
|
|||
25 | { |
||
26 | /** |
||
27 | * List subscribed topics by name. |
||
28 | * |
||
29 | * @Endpoint(name="pubsub:ls") |
||
30 | * |
||
31 | * @return Command |
||
32 | */ |
||
33 | public function ls(): Command |
||
37 | |||
38 | /** |
||
39 | * List peers we are currently pubsubbing with. |
||
40 | * |
||
41 | * @Endpoint(name="pubsub:peers") |
||
42 | * |
||
43 | * @param string $arg topic to list connected peers of Required: no |
||
44 | * |
||
45 | * @return Command |
||
46 | */ |
||
47 | public function peers(string $arg = null): Command |
||
51 | |||
52 | /** |
||
53 | * Publish a message to a given pubsub topic. |
||
54 | * |
||
55 | * @Endpoint(name="pubsub:pub") |
||
56 | * |
||
57 | * @param string $arg topic to publish to |
||
58 | * @param string $arg1 payload of message to publish |
||
59 | * |
||
60 | * @return Command |
||
61 | */ |
||
62 | public function pub(string $arg, string $arg1): Command |
||
66 | |||
67 | /** |
||
68 | * Subscribe to messages on a given topic. |
||
69 | * |
||
70 | * @Endpoint(name="pubsub:sub") |
||
71 | * |
||
72 | * @param string $arg string name of topic to subscribe to |
||
73 | * @param bool $discover try to discover other peers subscribed to the same topic |
||
74 | * |
||
75 | * @return Command |
||
76 | */ |
||
77 | public function sub(string $arg, bool $discover = null): Command |
||
81 | } |
||
82 |
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.