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 Dht implements Api |
|
|
|||
25 | { |
||
26 | /** |
||
27 | * Query the DHT for all of the multiaddresses associated with a Peer ID. |
||
28 | * |
||
29 | * @Endpoint(name="dht:findpeer") |
||
30 | * |
||
31 | * @param string $arg the ID of the peer to search for |
||
32 | * @param bool $verbose print extra information |
||
33 | * |
||
34 | * @return Command |
||
35 | */ |
||
36 | public function findpeer(string $arg, bool $verbose = false): Command |
||
40 | |||
41 | /** |
||
42 | * Find peers in the DHT that can provide a specific value, given a key. |
||
43 | * |
||
44 | * @Endpoint(name="dht:findprovs") |
||
45 | * |
||
46 | * @param string $arg the key to find providers for |
||
47 | * @param bool $verbose print extra information |
||
48 | * @param int $numProviders the number of providers to find |
||
49 | * |
||
50 | * @return Command |
||
51 | */ |
||
52 | public function findprovs(string $arg, bool $verbose = false, int $numProviders = 20): Command |
||
56 | |||
57 | /** |
||
58 | * Given a key, query the DHT for its best value. |
||
59 | * |
||
60 | * @Endpoint(name="dht:get") |
||
61 | * |
||
62 | * @param string $arg the key to find a value for |
||
63 | * @param bool $verbose print extra information |
||
64 | * |
||
65 | * @return Command |
||
66 | */ |
||
67 | public function get(string $arg, bool $verbose = false): Command |
||
71 | |||
72 | /** |
||
73 | * Announce to the network that you are providing given values. |
||
74 | * |
||
75 | * @Endpoint(name="dht:provide") |
||
76 | * |
||
77 | * @param string $arg the key[s] to send provide records for |
||
78 | * @param bool $verbose print extra information |
||
79 | * @param bool $recursive recursively provide entire graph |
||
80 | * |
||
81 | * @return Command |
||
82 | */ |
||
83 | public function provide(string $arg, bool $verbose = false, bool $recursive = false): Command |
||
87 | |||
88 | /** |
||
89 | * Write a key/value pair to the DHT. |
||
90 | * |
||
91 | * @Endpoint(name="dht:put") |
||
92 | * |
||
93 | * @param string $arg the key to store the value at |
||
94 | * @param string $arg1 the value to store |
||
95 | * @param bool $verbose print extra information |
||
96 | * |
||
97 | * @return Command |
||
98 | */ |
||
99 | public function put(string $arg, string $arg1, bool $verbose = false): Command |
||
103 | |||
104 | /** |
||
105 | * Find the closest Peer IDs to a given Peer ID by querying the DHT. |
||
106 | * |
||
107 | * @Endpoint(name="dht:query") |
||
108 | * |
||
109 | * @param string $arg the peerID to run the query against |
||
110 | * @param bool $verbose print extra information |
||
111 | * |
||
112 | * @return Command |
||
113 | */ |
||
114 | public function query(string $arg, bool $verbose = false): Command |
||
118 | } |
||
119 |
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.