Complex classes like LeadData often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use LeadData, and based on these observations, apply Extract Interface, too.
1 | <?php |
||
7 | class LeadData |
||
8 | { |
||
9 | private $firstname; |
||
10 | private $lastname; |
||
11 | private $phone; |
||
12 | private $cellphone; |
||
13 | private $email; |
||
14 | private $contact_type_id; |
||
15 | private $business_type_id; |
||
16 | private $notes; |
||
17 | private $origin_id; |
||
18 | private $suborigin_id; |
||
19 | private $assigned_user; |
||
20 | private $car_brand; |
||
21 | private $car_modelo; |
||
22 | private $city; |
||
23 | private $province; |
||
24 | private $country; |
||
25 | private $vendor_name; |
||
26 | private $vendor_email; |
||
27 | private $vendor_phone; |
||
28 | private $provider_service; |
||
29 | private $provider_url; |
||
30 | |||
31 | /** |
||
32 | * LeadData constructor. |
||
33 | * |
||
34 | * @param array $data |
||
35 | */ |
||
36 | 27 | public function __construct($data = []) |
|
45 | |||
46 | /** |
||
47 | * Object to array |
||
48 | * |
||
49 | * @return array |
||
50 | */ |
||
51 | 25 | public function toArray() |
|
78 | |||
79 | /** |
||
80 | * Validate |
||
81 | * |
||
82 | * @throws InvalidArgumentException |
||
83 | */ |
||
84 | 47 | private function validate() |
|
106 | |||
107 | // Validations |
||
108 | /** |
||
109 | * @return string |
||
110 | */ |
||
111 | 47 | public function validateFirstnameOrLastname() |
|
117 | |||
118 | /** |
||
119 | * @return string |
||
120 | */ |
||
121 | 46 | public function validatePhoneCellphoneOrEmail() |
|
129 | |||
130 | 40 | public function validateContactTypeId() |
|
136 | |||
137 | 28 | public function validateBusinessTypeId() |
|
143 | |||
144 | 16 | public function validateSuboriginId() |
|
150 | |||
151 | /** |
||
152 | * Set |
||
153 | * |
||
154 | * @param $key |
||
155 | * @param string $value |
||
156 | */ |
||
157 | 26 | private function set($key, $value = "") |
|
164 | |||
165 | /** |
||
166 | * @return mixed |
||
167 | */ |
||
168 | 48 | public function getFirstname() |
|
172 | |||
173 | /** |
||
174 | * @param $firstname |
||
175 | * |
||
176 | * @return $this |
||
177 | */ |
||
178 | 17 | public function setFirstname($firstname) |
|
183 | |||
184 | /** |
||
185 | * @return mixed |
||
186 | */ |
||
187 | 26 | public function getLastname() |
|
191 | |||
192 | /** |
||
193 | * @param $lastname |
||
194 | * |
||
195 | * @return $this |
||
196 | */ |
||
197 | 13 | public function setLastname($lastname) |
|
202 | |||
203 | /** |
||
204 | * @return mixed |
||
205 | */ |
||
206 | 47 | public function getPhone() |
|
210 | |||
211 | /** |
||
212 | * @param $phone |
||
213 | * |
||
214 | * @return $this |
||
215 | */ |
||
216 | 11 | public function setPhone($phone) |
|
221 | |||
222 | /** |
||
223 | * @return mixed |
||
224 | */ |
||
225 | 35 | public function getCellphone() |
|
229 | |||
230 | /** |
||
231 | * @param $cellphone |
||
232 | * |
||
233 | * @return $this |
||
234 | */ |
||
235 | 7 | public function setCellphone($cellphone) |
|
240 | |||
241 | /** |
||
242 | * @return mixed |
||
243 | */ |
||
244 | 23 | public function getEmail() |
|
248 | |||
249 | /** |
||
250 | * @param $email |
||
251 | * |
||
252 | * @return $this |
||
253 | */ |
||
254 | 7 | public function setEmail($email) |
|
259 | |||
260 | /** |
||
261 | * @return mixed |
||
262 | */ |
||
263 | 41 | public function getContactTypeId() |
|
267 | |||
268 | /** |
||
269 | * @param $contact_type_id |
||
270 | * |
||
271 | * @return $this |
||
272 | */ |
||
273 | 19 | public function setContactTypeId($contact_type_id) |
|
278 | |||
279 | /** |
||
280 | * @return mixed |
||
281 | */ |
||
282 | 29 | public function getBusinessTypeId() |
|
286 | |||
287 | /** |
||
288 | * @param $business_type_id |
||
289 | * |
||
290 | * @return $this |
||
291 | */ |
||
292 | 13 | public function setBusinessTypeId($business_type_id) |
|
297 | |||
298 | /** |
||
299 | * @return mixed |
||
300 | */ |
||
301 | 5 | public function getNotes() |
|
305 | |||
306 | /** |
||
307 | * @param $notes |
||
308 | * |
||
309 | * @return $this |
||
310 | */ |
||
311 | 1 | public function setNotes($notes) |
|
316 | |||
317 | /** |
||
318 | * @return mixed |
||
319 | */ |
||
320 | 5 | public function getOriginId() |
|
324 | |||
325 | /** |
||
326 | * @param $origin_id |
||
327 | * |
||
328 | * @return $this |
||
329 | */ |
||
330 | 1 | public function setOriginId($origin_id) |
|
335 | |||
336 | /** |
||
337 | * @return mixed |
||
338 | */ |
||
339 | 17 | public function getSuboriginId() |
|
343 | |||
344 | /** |
||
345 | * @param $suborigin_id |
||
346 | * |
||
347 | * @return $this |
||
348 | */ |
||
349 | 7 | public function setSuboriginId($suborigin_id) |
|
354 | |||
355 | /** |
||
356 | * @return mixed |
||
357 | */ |
||
358 | 5 | public function getAssignedUser() |
|
362 | |||
363 | /** |
||
364 | * @param $assigned_user |
||
365 | * |
||
366 | * @return $this |
||
367 | */ |
||
368 | 1 | public function setAssignedUser($assigned_user) |
|
373 | |||
374 | /** |
||
375 | * @return mixed |
||
376 | */ |
||
377 | 5 | public function getCarBrand() |
|
381 | |||
382 | /** |
||
383 | * @param $car_brand |
||
384 | * |
||
385 | * @return $this |
||
386 | */ |
||
387 | 1 | public function setCarBrand($car_brand) |
|
392 | |||
393 | /** |
||
394 | * @return mixed |
||
395 | */ |
||
396 | 5 | public function getCarModelo() |
|
400 | |||
401 | /** |
||
402 | * @param $car_modelo |
||
403 | * |
||
404 | * @return $this |
||
405 | */ |
||
406 | 1 | public function setCarModelo($car_modelo) |
|
411 | |||
412 | /** |
||
413 | * @return mixed |
||
414 | */ |
||
415 | 5 | public function getCity() |
|
419 | |||
420 | /** |
||
421 | * @param $city |
||
422 | * |
||
423 | * @return $this |
||
424 | */ |
||
425 | 1 | public function setCity($city) |
|
430 | |||
431 | /** |
||
432 | * @return mixed |
||
433 | */ |
||
434 | 5 | public function getProvince() |
|
438 | |||
439 | /** |
||
440 | * @param $province |
||
441 | * |
||
442 | * @return $this |
||
443 | */ |
||
444 | 1 | public function setProvince($province) |
|
449 | |||
450 | /** |
||
451 | * @return mixed |
||
452 | */ |
||
453 | 5 | public function getCountry() |
|
457 | |||
458 | /** |
||
459 | * @param $country |
||
460 | * |
||
461 | * @return $this |
||
462 | */ |
||
463 | 1 | public function setCountry($country) |
|
468 | |||
469 | /** |
||
470 | * @return mixed |
||
471 | */ |
||
472 | 5 | public function getVendorName() |
|
476 | |||
477 | /** |
||
478 | * @param $vendor_name |
||
479 | * |
||
480 | * @return $this |
||
481 | */ |
||
482 | 1 | public function setVendorName($vendor_name) |
|
487 | |||
488 | /** |
||
489 | * @return mixed |
||
490 | */ |
||
491 | 5 | public function getVendorEmail() |
|
495 | |||
496 | /** |
||
497 | * @param $vendor_email |
||
498 | * |
||
499 | * @return $this |
||
500 | */ |
||
501 | 1 | public function setVendorEmail($vendor_email) |
|
506 | |||
507 | /** |
||
508 | * @return mixed |
||
509 | */ |
||
510 | 5 | public function getVendorPhone() |
|
514 | |||
515 | /** |
||
516 | * @param $vendor_phone |
||
517 | * |
||
518 | * @return $this |
||
519 | */ |
||
520 | 1 | public function setVendorPhone($vendor_phone) |
|
525 | |||
526 | /** |
||
527 | * @return mixed |
||
528 | */ |
||
529 | 5 | public function getProviderService() |
|
533 | |||
534 | /** |
||
535 | * @param $provider_service |
||
536 | * |
||
537 | * @return $this |
||
538 | */ |
||
539 | 1 | public function setProviderService($provider_service) |
|
544 | |||
545 | /** |
||
546 | * @return mixed |
||
547 | */ |
||
548 | 5 | public function getProviderUrl() |
|
552 | |||
553 | /** |
||
554 | * @param $provider_url |
||
555 | * |
||
556 | * @return $this |
||
557 | */ |
||
558 | 1 | public function setProviderUrl($provider_url) |
|
563 | } |
||
564 |