Complex classes like topic 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 topic, and based on these observations, apply Extract Interface, too.
1 | <?php |
||
15 | class topic |
||
16 | { |
||
17 | /** @var array */ |
||
18 | private $topic_row; |
||
19 | |||
20 | /** @var \phpbb\user */ |
||
21 | private $user; |
||
22 | |||
23 | /** @var \phpbb\auth\auth */ |
||
24 | private $auth; |
||
25 | |||
26 | /** @var string */ |
||
27 | private $phpbb_root_path; |
||
28 | |||
29 | /** @var string */ |
||
30 | private $php_ext; |
||
31 | |||
32 | /** @var int */ |
||
33 | private $topic_id; |
||
34 | |||
35 | // unread_topic should be based on the users topic tracking info |
||
36 | // this wont be supported until phpbb code is less complex |
||
37 | /** @var boolean */ |
||
38 | private $unread_topic = false; |
||
39 | |||
40 | /** @var string */ |
||
41 | private $folder_img = ''; |
||
42 | /** @var string */ |
||
43 | private $folder_alt = ''; |
||
44 | /** @var string */ |
||
45 | private $topic_type = ''; |
||
46 | |||
47 | /** @var int */ |
||
48 | private $forum_id; |
||
49 | |||
50 | /** @var mixed */ |
||
51 | private $replies; |
||
52 | |||
53 | /** @var string */ |
||
54 | private $view_topic_url_params; |
||
55 | /** @var string */ |
||
56 | private $view_topic_url; |
||
57 | |||
58 | /** @var string */ |
||
59 | private $newest_post_url; |
||
60 | /** @var string */ |
||
61 | private $last_post_url; |
||
62 | |||
63 | /** @var boolean */ |
||
64 | private $topic_unapproved; |
||
65 | /** @var boolean */ |
||
66 | private $posts_unapproved; |
||
67 | /** @var boolean */ |
||
68 | private $topic_deleted; |
||
69 | |||
70 | /** |
||
71 | * |
||
72 | * @param array $topic_row a db topic row |
||
73 | */ |
||
74 | public function __construct(array $topic_row, |
||
114 | |||
115 | public function user_posted() |
||
119 | |||
120 | public function attach_icon_img() |
||
124 | |||
125 | public function topic_reported() |
||
129 | |||
130 | public function u_mcp_queue() |
||
151 | |||
152 | public function unapproved_img() |
||
156 | |||
157 | public function topic_deleted() |
||
161 | |||
162 | public function topic_unapproved() |
||
166 | |||
167 | public function posts_unapproved() |
||
171 | |||
172 | public function replies() |
||
176 | |||
177 | public function newest_post_url() |
||
181 | |||
182 | public function last_post_url() |
||
186 | |||
187 | public function view_topic_url() |
||
191 | |||
192 | public function img_style() |
||
196 | |||
197 | public function folder_img() |
||
201 | |||
202 | public function folder_img_alt() |
||
206 | |||
207 | public function topic_type() |
||
211 | |||
212 | public function unread_topic() |
||
216 | |||
217 | public function forum_id() |
||
221 | |||
222 | public function topic_id() |
||
226 | |||
227 | public function has_poll() |
||
231 | |||
232 | public function post_announce() |
||
236 | |||
237 | public function post_global() |
||
241 | |||
242 | public function post_sticky() |
||
246 | |||
247 | public function locked() |
||
251 | |||
252 | public function moved() |
||
256 | |||
257 | public function last_post_author() |
||
261 | |||
262 | public function topic_author() |
||
266 | |||
267 | public function mcp_report() |
||
271 | |||
272 | public function forum_name() |
||
276 | |||
277 | public function topic_title() |
||
281 | |||
282 | public function views() |
||
286 | |||
287 | public function author($mode) |
||
291 | |||
292 | public function last_author($mode) |
||
296 | |||
297 | public function topic_time() |
||
301 | |||
302 | public function last_post_subject() |
||
306 | |||
307 | public function last_post_time() |
||
311 | |||
312 | public function last_view_time() |
||
316 | |||
317 | /** |
||
318 | * This will allow the style designer to output a different header |
||
319 | * or even separate the list of announcements from sticky and normal topics |
||
320 | * @return number |
||
321 | */ |
||
322 | public function topic_type_switch() |
||
328 | } |
||
329 |