Complex classes like PayloadBuilder 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 PayloadBuilder, and based on these observations, apply Extract Interface, too.
1 | <?php |
||
18 | final class PayloadBuilder implements PayloadBuilderInterface |
||
19 | { |
||
20 | /** |
||
21 | * @var string |
||
22 | */ |
||
23 | private $overridePart1; |
||
24 | |||
25 | /** |
||
26 | * @var string |
||
27 | */ |
||
28 | private $overridePart2; |
||
29 | |||
30 | /** |
||
31 | * @param string $recipientOverride |
||
32 | * |
||
33 | * @throws Exception |
||
34 | */ |
||
35 | 39 | public function __construct($recipientOverride = '') |
|
48 | |||
49 | /** |
||
50 | * @param Swift_Mime_Message $message |
||
51 | * |
||
52 | * @return array |
||
53 | */ |
||
54 | 33 | public function buildPayload(Swift_Mime_Message $message) |
|
79 | |||
80 | /** |
||
81 | * @param Swift_Mime_Message $message |
||
82 | * |
||
83 | * @return array |
||
84 | * @throws Exception |
||
85 | */ |
||
86 | 33 | private function buildRecipients(Swift_Mime_Message $message) |
|
119 | |||
120 | /** |
||
121 | * @param string $email |
||
122 | * @param string $name |
||
123 | * @param array $tags |
||
124 | * @param array $metadata |
||
125 | * @param array $substitutionData |
||
126 | * @param string $originalEmail |
||
127 | * |
||
128 | * @return array |
||
129 | */ |
||
130 | 30 | private function buildRecipient( |
|
162 | |||
163 | /** |
||
164 | * @param Swift_Mime_Message $message |
||
165 | * |
||
166 | * @return array |
||
167 | */ |
||
168 | 30 | private function buildContent(Swift_Mime_Message $message) |
|
207 | |||
208 | /** |
||
209 | * @param Swift_Mime_Message $message |
||
210 | * |
||
211 | * @return array|string |
||
212 | */ |
||
213 | 30 | private function buildFrom(Swift_Mime_Message $message) |
|
223 | |||
224 | /** |
||
225 | * @param Swift_Mime_Message $message |
||
226 | * |
||
227 | * @return array |
||
228 | */ |
||
229 | 30 | private function buildHeaders(Swift_Mime_Message $message) |
|
262 | |||
263 | /** |
||
264 | * @param Swift_Mime_Message $message |
||
265 | * |
||
266 | * @return array |
||
267 | */ |
||
268 | 30 | private function buildAttachments(Swift_Mime_Message $message) |
|
284 | |||
285 | /** |
||
286 | * @param Swift_Mime_Message $message |
||
287 | * |
||
288 | * @return string |
||
289 | */ |
||
290 | 30 | private function buildCampaignId(Swift_Mime_Message $message) |
|
298 | |||
299 | /** |
||
300 | * @param Swift_Mime_Message $message |
||
301 | * |
||
302 | * @return array |
||
303 | */ |
||
304 | 30 | private function buildMetadata(Swift_Mime_Message $message) |
|
312 | |||
313 | /** |
||
314 | * @param Swift_Mime_Message $message |
||
315 | * |
||
316 | * @return array |
||
317 | */ |
||
318 | 30 | private function buildSubstitutionData(Swift_Mime_Message $message) |
|
326 | |||
327 | /** |
||
328 | * @param Swift_Mime_Message $message |
||
329 | * |
||
330 | * @return array |
||
331 | */ |
||
332 | 30 | private function buildOptions(Swift_Mime_Message $message) |
|
340 | |||
341 | /** |
||
342 | * Convert *|foo|* to {{foo}} |
||
343 | * |
||
344 | * @param string |
||
345 | * |
||
346 | * @return string |
||
347 | */ |
||
348 | 30 | private function convertAsteriskPipeToCurlyBraces($content) |
|
352 | |||
353 | /** |
||
354 | * @param Swift_Mime_Message $message |
||
355 | * |
||
356 | * @return string |
||
357 | */ |
||
358 | 30 | private function readUserContentType(Swift_Mime_Message $message) |
|
365 | |||
366 | /** |
||
367 | * @param string $email |
||
368 | * |
||
369 | * @return string |
||
370 | */ |
||
371 | 30 | private function overrideRecipient($email) |
|
384 | } |
||
385 |