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 |
||
9 | View Code Duplication | class Publisher extends Base |
|
10 | { |
||
11 | const ALL_PUBLISHERS_ID = "cops:publishers"; |
||
12 | const PUBLISHERS_COLUMNS = "publishers.id as id, publishers.name as name, count(*) as count"; |
||
13 | const SQL_ALL_PUBLISHERS = "select {0} from publishers, books_publishers_link where publishers.id = publisher group by publishers.id, publishers.name order by publishers.name"; |
||
14 | const SQL_PUBLISHERS_FOR_SEARCH = "select {0} from publishers, books_publishers_link where publishers.id = publisher and upper (publishers.name) like ? group by publishers.id, publishers.name order by publishers.name"; |
||
15 | |||
16 | |||
17 | public $id; |
||
18 | public $name; |
||
19 | |||
20 | 12 | public function __construct($post) { |
|
24 | |||
25 | 10 | public function getUri () { |
|
28 | |||
29 | 7 | public function getEntryId () { |
|
32 | |||
33 | 18 | public static function getCount() { |
|
37 | |||
38 | 5 | public static function getPublisherByBookId ($bookId) { |
|
39 | 5 | $result = parent::getDb ()->prepare('select publishers.id as id, name |
|
40 | from books_publishers_link, publishers |
||
41 | where publishers.id = publisher and book = ?'); |
||
42 | 5 | $result->execute (array ($bookId)); |
|
43 | 5 | if ($post = $result->fetchObject ()) { |
|
44 | 5 | return new Publisher ($post); |
|
45 | } |
||
46 | return NULL; |
||
47 | } |
||
48 | |||
49 | 1 | public static function getPublisherById ($publisherId) { |
|
50 | 1 | $result = parent::getDb ()->prepare('select id, name |
|
51 | from publishers where id = ?'); |
||
52 | 1 | $result->execute (array ($publisherId)); |
|
53 | 1 | if ($post = $result->fetchObject ()) { |
|
54 | 1 | return new Publisher ($post); |
|
55 | } |
||
56 | return NULL; |
||
57 | } |
||
58 | |||
59 | 2 | public static function getAllPublishers() { |
|
62 | |||
63 | 23 | public static function getAllPublishersByQuery($query) { |
|
66 | } |
||
67 |
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.