Temos uma classe que converte documentos do Word para PDFs. A tarefa é simples, receber o arquivo Word e retornar ele em um formato PDF - Essa aplicação utiliza uma biblioteca que converte documentos do Word em PDFs. A biblioteca Aspose.words.
O cliente pede para que seja adicionado a opção para converter o documentos Excel para PDF, e para isso adicionamos um condicional para efetuar essa transformação. Com isso temos a seguinte classe:
publicclassConversorPDF {
// A aplicação foi projetada para tratar arquivos WORD, alter o código vai modificar // o comportamento para os clientes antigos, é necessário garantir a compatibilidade // com clientes antigos nas novas alteraçõespublicStringtipoDocumento = "WORD";
/** * Esse método recebe como entrada o arquivo que vai ser convertido * para PDF * * @param bytesArquivo * @return */publicbyte[] converteParaPDF(byte[] bytesArquivo){
if(tipoDocumento.equals("WORD")) {
InputStreamentrada = newByteArrayInputStream(bytesArquivo);
com.aspose.words.DocumentdocumentoWord = newcom.aspose.words.Document(entrada);
ByteArrayOutputStreamdocumentoPDF = newByteArrayOutputStream();
documentoWord.save(documentoPDF, SaveFormat.PDF);
returndocumentoPDF.toByteArray();
} else {
InputStreamentrada = newByteArrayInputStream(bytesArquivo);
Workbookworkbook = newWorkbook(entrada);
PdfSaveOptionsopcaoSalvar = newPdfSaveOptions();
opcaoSalvar.setCompliance(PdfCompliance.PDF_A_1_B);
ByteArrayOutputStreamdocumentoPDF = newByteArrayOutputStream();
workbook.save(documentoPDF, opcaoSalvar);
returndocumentoPDF.toByteArray();
}
}
}Este código funcionará perfeitamente para o novo cliente (e ainda funcionará conforme o esperado para os clientes existentes), mas alguns problemas de design de software estão começando a aparecer no código. Isso significa que não estamos fazendo isso da maneira perfeita, e não seremos capazes de modificar nossa classe facilmente quando um novo tipo de documento for solicitado.
- Quais são os problemas que você consegue enxergar aqui?
- Qual refatoração você propõe?
Por favor, envie um pull request com as alterações que você recomendaria aqui. Tente gastar 30 minutos no máximo para todo o trabalho. Se você precisar de mais tempo, está fazendo algo errado.
Além disso, se você acha que algo mais deve ser refatorado ainda mais, coloque suas idéias na descrição do pull request.