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 |
||
16 | class TdbmInstallController extends Controller |
||
17 | { |
||
18 | /** |
||
19 | * @var HtmlBlock |
||
20 | */ |
||
21 | public $content; |
||
22 | |||
23 | public $selfedit; |
||
24 | |||
25 | /** |
||
26 | * The active MoufManager to be edited/viewed. |
||
27 | * |
||
28 | * @var MoufManager |
||
29 | */ |
||
30 | public $moufManager; |
||
31 | |||
32 | /** |
||
33 | * The template used by the main page for mouf. |
||
34 | * |
||
35 | * @Property |
||
36 | * @Compulsory |
||
37 | * |
||
38 | * @var TemplateInterface |
||
39 | */ |
||
40 | public $template; |
||
41 | |||
42 | /** |
||
43 | * Displays the first install screen. |
||
44 | * |
||
45 | * @Action |
||
46 | * @Logged |
||
47 | * |
||
48 | * @param string $selfedit If true, the name of the component must be a component from the Mouf framework itself (internal use only) |
||
49 | */ |
||
50 | public function defaultAction($selfedit = 'false') |
||
63 | |||
64 | /** |
||
65 | * Skips the install process. |
||
66 | * |
||
67 | * @Action |
||
68 | * @Logged |
||
69 | * |
||
70 | * @param string $selfedit If true, the name of the component must be a component from the Mouf framework itself (internal use only) |
||
71 | */ |
||
72 | public function skip($selfedit = 'false') |
||
76 | |||
77 | protected $daoNamespace; |
||
78 | protected $beanNamespace; |
||
79 | protected $autoloadDetected; |
||
80 | protected $storeInUtc; |
||
81 | |||
82 | /** |
||
83 | * Displays the second install screen. |
||
84 | * |
||
85 | * @Action |
||
86 | * @Logged |
||
87 | * |
||
88 | * @param string $selfedit If true, the name of the component must be a component from the Mouf framework itself (internal use only) |
||
89 | */ |
||
90 | public function configure($selfedit = 'false') |
||
91 | { |
||
92 | $this->selfedit = $selfedit; |
||
93 | |||
94 | if ($selfedit == 'true') { |
||
95 | $this->moufManager = MoufManager::getMoufManager(); |
||
96 | } else { |
||
97 | $this->moufManager = MoufManager::getMoufManagerHiddenInstance(); |
||
98 | } |
||
99 | |||
100 | // Let's start by performing basic checks about the instances we assume to exist. |
||
101 | if (!$this->moufManager->instanceExists('dbalConnection')) { |
||
102 | $this->displayErrorMsg("The TDBM install process assumes your database connection instance is already created, and that the name of this instance is 'dbalConnection'. Could not find the 'dbalConnection' instance."); |
||
103 | |||
104 | return; |
||
105 | } |
||
106 | |||
107 | $this->daoNamespace = $this->moufManager->getVariable('tdbmDefaultDaoNamespace_tdbmService'); |
||
108 | $this->beanNamespace = $this->moufManager->getVariable('tdbmDefaultBeanNamespace_tdbmService'); |
||
109 | |||
110 | View Code Duplication | if ($this->daoNamespace == null && $this->beanNamespace == null) { |
|
|
|||
111 | $classNameMapper = ClassNameMapper::createFromComposerFile(__DIR__.'/../../../../../../../../composer.json'); |
||
112 | |||
113 | $autoloadNamespaces = $classNameMapper->getManagedNamespaces(); |
||
114 | if ($autoloadNamespaces) { |
||
115 | $this->autoloadDetected = true; |
||
116 | $rootNamespace = $autoloadNamespaces[0]; |
||
117 | $this->daoNamespace = $rootNamespace.'Model\\Dao'; |
||
118 | $this->beanNamespace = $rootNamespace.'Model\\Bean'; |
||
119 | } else { |
||
120 | $this->autoloadDetected = false; |
||
121 | $this->daoNamespace = 'YourApplication\\Model\\Dao'; |
||
122 | $this->beanNamespace = 'YourApplication\\Model\\Bean'; |
||
123 | } |
||
124 | } else { |
||
125 | $this->autoloadDetected = true; |
||
126 | } |
||
127 | $this->defaultPath = true; |
||
128 | $this->storePath = ''; |
||
129 | |||
130 | $this->castDatesToDateTime = true; |
||
131 | |||
132 | $this->content->addFile(dirname(__FILE__).'/../../../../views/installStep2.php', $this); |
||
133 | $this->template->toHtml(); |
||
134 | } |
||
135 | |||
136 | /** |
||
137 | * This action generates the TDBM instance, then the DAOs and Beans. |
||
138 | * |
||
139 | * @Action |
||
140 | * |
||
141 | * @param string $daonamespace |
||
142 | * @param string $beannamespace |
||
143 | * @param int $storeInUtc |
||
144 | * @param string $selfedit |
||
145 | * |
||
146 | * @throws \Mouf\MoufException |
||
147 | */ |
||
148 | public function generate($daonamespace, $beannamespace, $storeInUtc = 0, $selfedit = 'false', $defaultPath = false, $storePath = '') |
||
149 | { |
||
150 | $this->selfedit = $selfedit; |
||
151 | |||
152 | if ($selfedit == 'true') { |
||
153 | $this->moufManager = MoufManager::getMoufManager(); |
||
154 | } else { |
||
155 | $this->moufManager = MoufManager::getMoufManagerHiddenInstance(); |
||
156 | } |
||
157 | |||
158 | if (!$this->moufManager->instanceExists('doctrineApcCache')) { |
||
159 | $doctrineApcCache = $this->moufManager->createInstance('Doctrine\\Common\\Cache\\ApcCache')->setName('doctrineApcCache'); |
||
160 | // TODO: set namespace |
||
161 | } else { |
||
162 | $doctrineApcCache = $this->moufManager->getInstanceDescriptor('doctrineApcCache'); |
||
163 | } |
||
164 | |||
165 | if (!$this->moufManager->instanceExists('tdbmService')) { |
||
166 | $tdbmService = $this->moufManager->createInstance('Mouf\\Database\\TDBM\\TDBMService')->setName('tdbmService'); |
||
167 | $tdbmService->getConstructorArgumentProperty('connection')->setValue($this->moufManager->getInstanceDescriptor('dbalConnection')); |
||
168 | $tdbmService->getConstructorArgumentProperty('cache')->setValue($doctrineApcCache); |
||
169 | } |
||
170 | |||
171 | $this->moufManager->rewriteMouf(); |
||
172 | |||
173 | TdbmController::generateDaos($this->moufManager, 'tdbmService', $daonamespace, $beannamespace, 'DaoFactory', 'daoFactory', $selfedit, $storeInUtc, $defaultPath, $storePath); |
||
174 | |||
175 | InstallUtils::continueInstall($selfedit == 'true'); |
||
176 | } |
||
177 | |||
178 | protected $errorMsg; |
||
179 | |||
180 | private function displayErrorMsg($msg) |
||
186 | } |
||
187 |
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.