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 |
||
17 | abstract class SchemaPluginBase extends PluginBase implements SchemaPluginInterface, ContainerFactoryPluginInterface { |
||
18 | use DependencySerializationTrait; |
||
19 | |||
20 | /** |
||
21 | * The schema builder object. |
||
22 | * |
||
23 | * @var \Drupal\graphql\Plugin\GraphQL\PluggableSchemaBuilderInterface |
||
24 | */ |
||
25 | protected $schemaBuilder; |
||
26 | |||
27 | /** |
||
28 | * {@inheritdoc} |
||
29 | */ |
||
30 | public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { |
||
38 | |||
39 | /** |
||
40 | * SchemaPluginBase constructor. |
||
41 | * |
||
42 | * @param array $configuration |
||
43 | * The plugin configuration array. |
||
44 | * @param string $pluginId |
||
45 | * The plugin id. |
||
46 | * @param array $pluginDefinition |
||
47 | * The plugin definition array. |
||
48 | * @param \Drupal\graphql\Plugin\GraphQL\TypeSystemPluginManagerAggregator $pluginManagers |
||
49 | * Type system plugin manager aggregator service. |
||
50 | */ |
||
51 | public function __construct($configuration, $pluginId, $pluginDefinition, TypeSystemPluginManagerAggregator $pluginManagers) { |
||
55 | |||
56 | /** |
||
57 | * {@inheritdoc} |
||
58 | */ |
||
59 | public function getSchema() { |
||
90 | |||
91 | /** |
||
92 | * Extract type or field definitions from plugins. |
||
93 | * |
||
94 | * @param array $plugins |
||
95 | * The list of plugins to extract the type or field definitions from. |
||
96 | * |
||
97 | * @return array |
||
98 | * The list of extracted type or field definitions. |
||
99 | */ |
||
100 | protected function extractDefinitions(array $plugins) { |
||
105 | |||
106 | /** |
||
107 | * Retrieve all mutations. |
||
108 | * |
||
109 | * @return \Drupal\graphql\Plugin\GraphQL\TypeSystemPluginInterface[] |
||
110 | * The list of mutation plugins. |
||
111 | */ |
||
112 | protected function getMutations() { |
||
115 | |||
116 | /** |
||
117 | * Retrieve all fields that are not associated with a specific type. |
||
118 | * |
||
119 | * @return \Drupal\graphql\Plugin\GraphQL\TypeSystemPluginInterface[] |
||
120 | * The list root field plugins. |
||
121 | */ |
||
122 | protected function getRootFields() { |
||
125 | |||
126 | /** |
||
127 | * Retrieve all fields that are not associated with a specific type. |
||
128 | * |
||
129 | * @return \Drupal\graphql\Plugin\GraphQL\TypeSystemPluginInterface[] |
||
130 | * The list root field plugins. |
||
131 | */ |
||
132 | protected function getFields($type) { |
||
136 | |||
137 | /** |
||
138 | * Retrieve all types to be registered explicitly. |
||
139 | * |
||
140 | * @return \Drupal\graphql\Plugin\GraphQL\TypeSystemPluginInterface[] |
||
141 | * The list of types to be registered explicitly. |
||
142 | */ |
||
143 | protected function getTypes() { |
||
148 | |||
149 | } |
||
150 |
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.