Complex classes like FileManager 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 FileManager, and based on these observations, apply Extract Interface, too.
| 1 | <?php |
||
| 31 | class FileManager |
||
| 32 | { |
||
| 33 | /** |
||
| 34 | * @var Filesystem |
||
| 35 | */ |
||
| 36 | private $fileSystem; |
||
| 37 | |||
| 38 | /** |
||
| 39 | * @var DocumentManager |
||
| 40 | */ |
||
| 41 | private $documentManager; |
||
| 42 | |||
| 43 | /** |
||
| 44 | * @var array allowedMimeTypes Control files to be saved and returned |
||
| 45 | */ |
||
| 46 | private $allowedMimeTypes = []; |
||
| 47 | |||
| 48 | /** |
||
| 49 | * @var bool whether or not we should read the files mimetype or trust the database (depending on storage) |
||
| 50 | */ |
||
| 51 | private $readFileSystemMimeType = false; |
||
| 52 | |||
| 53 | /** |
||
| 54 | * FileManager constructor. |
||
| 55 | * |
||
| 56 | * @param Filesystem $fileSystem file system abstraction layer for s3 and more |
||
| 57 | * @param ManagerRegistry $managerRegistry MongoDB registry manager |
||
| 58 | */ |
||
| 59 | public function __construct( |
||
| 66 | |||
| 67 | /** |
||
| 68 | * Configure allowed content types, empty is equal to all |
||
| 69 | * |
||
| 70 | * @param array $mimeTypes of Allowed types, application/pdf, image/jpeg... |
||
| 71 | * |
||
| 72 | * @return void |
||
| 73 | */ |
||
| 74 | public function setAllowedMimeTypes(array $mimeTypes) |
||
| 78 | |||
| 79 | /** |
||
| 80 | * set ReadFileSystemMimeType |
||
| 81 | * |
||
| 82 | * @param bool $readFileSystemMimeType readFileSystemMimeType |
||
| 83 | * |
||
| 84 | * @return void |
||
| 85 | */ |
||
| 86 | public function setReadFileSystemMimeType($readFileSystemMimeType) |
||
| 90 | |||
| 91 | /** |
||
| 92 | * Will update the response object with provided file data |
||
| 93 | * |
||
| 94 | * @param Response $response response |
||
| 95 | * @param DocumentFile $file File document object from DB |
||
| 96 | * |
||
| 97 | * @return Response |
||
| 98 | * @throws InvalidArgumentException if invalid info fetched from fileSystem |
||
| 99 | */ |
||
| 100 | public function buildGetContentResponse(Response $response, FileDocument $file) |
||
| 136 | |||
| 137 | |||
| 138 | /** |
||
| 139 | * Save or update a file |
||
| 140 | * |
||
| 141 | * @param string $id ID of file |
||
| 142 | * @param String $filepath path to the file to save |
||
| 143 | * |
||
| 144 | * @return void |
||
| 145 | */ |
||
| 146 | public function saveFile($id, $filepath) |
||
| 156 | |||
| 157 | /** |
||
| 158 | * @param DocumentFile $document File Document |
||
| 159 | * @param Request $request Request bag |
||
| 160 | * @param DocumentModel $model File Document Model |
||
| 161 | * @return DocumentFile |
||
| 162 | */ |
||
| 163 | public function handleSaveRequest( |
||
| 226 | |||
| 227 | /** |
||
| 228 | * Create the basic needs for a file |
||
| 229 | * |
||
| 230 | * @param DocumentFile $document Post or Put file document |
||
| 231 | * @param UploadedFile $file To be used in set metadata |
||
| 232 | * @param DocumentFile $original If there is a original document |
||
| 233 | * |
||
| 234 | * @return DocumentFile |
||
| 235 | * @throws InvalidArgumentException |
||
| 236 | */ |
||
| 237 | private function buildFileDocument(FileDocument $document, $file, $original) |
||
| 286 | |||
| 287 | /** |
||
| 288 | * Simple validation for post/put request |
||
| 289 | * |
||
| 290 | * @param DocumentFile $document File document |
||
| 291 | * @param string $requestId Request ID |
||
| 292 | * @return bool |
||
| 293 | */ |
||
| 294 | private function validIdRequest(FileDocument $document, $requestId) |
||
| 304 | |||
| 305 | /** |
||
| 306 | * Simple delete item from file system |
||
| 307 | * |
||
| 308 | * @param string $id ID of file to be deleted |
||
| 309 | * |
||
| 310 | * @return void |
||
| 311 | */ |
||
| 312 | public function remove($id) |
||
| 318 | |||
| 319 | /** |
||
| 320 | * Set global uploaded file. |
||
| 321 | * Only ONE file allowed per upload. |
||
| 322 | * |
||
| 323 | * @param Request $request service request |
||
| 324 | * @return UploadedFile if file was uploaded |
||
| 325 | * @throws InvalidArgumentException |
||
| 326 | */ |
||
| 327 | private function getUploadedFileFromRequest(Request $request) |
||
| 344 | } |
||
| 345 |