Tecnologia

Atualizando Código Legado: Otimização de Leitura e Escrita de Arquivos CSV

Tecnologia

Atualizando Código Legado: Otimização de Leitura e Escrita de Arquivos CSV

Tecnologia

Atualizando Código Legado: Otimização de Leitura e Escrita de Arquivos CSV

28 de nov. de 2024
0
minutos

Em sistemas antigos, é comum encontrarmos código legado escrito em versões descontinuadas do PHP, como PHP 4. Embora esse código possa ainda funcionar, ele provavelmente não é otimizado e carece de boas práticas modernas. Neste post, vamos demonstrar um exemplo de código legado em PHP 4 que lê e escreve arquivos CSV. Em seguida, apresentaremos uma versão otimizada usando PHP 8.4 e o padrão MVC, com melhorias de segurança, performance e legibilidade.

Exemplo de Código Legado em PHP 4

O código abaixo é uma função simples para ler um arquivo CSV, tratar o conteúdo e escrever os dados formatados em um novo arquivo CSV. Esse exemplo ilustra como o código era comumente estruturado em versões legadas do PHP:

<?php
function processCSV($inputFile, $outputFile) {
    $inputHandle = fopen($inputFile, "r");
    $outputHandle = fopen($outputFile, "w");
    while (($data = fgetcsv($inputHandle, 1000, ",")) !== FALSE) {
        for ($i = 0; $i < count($data); $i++) {
            $data[$i] = trim($data[$i])

Problemas com o Código Legado:

  1. Acoplamento: A função processCSV faz a leitura, o processamento e a escrita de dados em uma única função, o que torna o código difícil de manter.

  2. Validação Limitada: Não há verificações detalhadas de erros, o que pode levar a falhas silenciosas.

  3. Falta de Organização: O código não segue padrões de organização como MVC, que separa lógica de negócio, dados e apresentação.

Código Otimizado em PHP 8.4 Usando MVC

Agora vamos ajustar esse código com PHP 8.4, usando o padrão MVC e boas práticas modernas de programação. Dividiremos o código em três componentes principais:

  • Model: Lógica de manipulação do CSV

  • Controller: Controla o fluxo e a lógica de negócios

  • View: Embora este exemplo não tenha uma saída visual, o View pode ser uma mensagem final de conclusão

Estrutura de Pastas:

markdown

Copiar código

app/

├── Controllers/

│   └── CsvController.php

├── Models/

│   └── CsvHandler.php

└── Views/

    └── CsvView.php

Passo 1: Model - CsvHandler.php

No Model, colocamos a lógica para ler, processar e escrever o CSV. O Model é responsável apenas pela manipulação de dados e contém métodos reutilizáveis.

<?php
namespace App\Models;
class CsvHandler
{
    private string $inputFile;
    private string $outputFile;
    public function __construct(string $inputFile, string $outputFile)
    {
        $this->inputFile = $inputFile;
        $this->outputFile = $outputFile;
    }
    /**
     * Lê o arquivo CSV de entrada, processa os dados e grava no arquivo de saída.
     */
    public function process(): bool
    {
        try {
            $inputHandle = fopen($this->inputFile, "r");
            $outputHandle = fopen($this->outputFile, "w");
            while (($data = fgetcsv($inputHandle, 1000, ",")) !== false) {
                $formattedData = $this->formatRow($data);
                fputcsv($outputHandle, $formattedData);
            }
            fclose($inputHandle);
            fclose($outputHandle);
            return true;
        } catch (\Exception $e) {
            error_log("Erro ao processar CSV: " . $e->getMessage());
            return false;
        }
    }
    /**
     * Formata uma linha do CSV, removendo espaços e convertendo para maiúsculas.
     */
    private function formatRow(array $row): array
    {

Passo 2: Controller - CsvController.php

O Controller controla o fluxo entre o Model e a View. Ele recebe as solicitações, instancia o Model e direciona para a View.

<?php
namespace App\Controllers;
use App\Models\CsvHandler;
class CsvController
{
    private CsvHandler $csvHandler;
    public function __construct(string $inputFile, string $outputFile)
    {
        $this->csvHandler = new CsvHandler($inputFile, $outputFile);
    }
    /**
     * Processa o CSV e chama a View para exibir o resultado.
     */
    public function handleRequest(): void
    {
        $success = $this->csvHandler->process();
        if ($success) {
            echo "Arquivo CSV processado com sucesso!";
        } else {
            echo 

Passo 3: View - CsvView.php

Neste exemplo, o View é bem simples, mas em um sistema real poderia incluir uma interface para o usuário enviar arquivos e visualizar relatórios.

<?php
namespace App\Views;
class CsvView
{
    public function render(string $message): void
    {
        echo 

Executando o Código

Agora, para executar o processamento de CSV, podemos criar um arquivo index.php para instanciar o CsvController e chamar o método handleRequest.

<

Explicação do Processo de Otimização

  1. Modularização e Padrão MVC: Ao dividir o código entre Model, Controller e View, garantimos uma melhor organização. O Model CsvHandler agora lida com a lógica de manipulação dos dados, enquanto o Controller CsvController é responsável pelo fluxo entre o Model e View.

  2. PHP 8.4 e Funções Modernas: Utilizamos array_map e a função fn para manipular o array de dados de maneira mais elegante e concisa, o que torna o código mais legível e performático.

  3. Tratamento de Exceções: Foi adicionado um try-catch para capturar erros durante a leitura e gravação de arquivos. Isso permite um controle mais robusto e seguro.

  4. Responsabilidade Única: Cada classe tem uma responsabilidade única, seguindo o princípio SOLID, que facilita futuras manutenções e atualizações.

  5. Comentários e Anotações: Cada função e método possuem anotações para descrever suas funcionalidades, o que ajuda na compreensão do código.

Conclusão

A atualização de um código legado em PHP 4 para uma versão moderna em PHP 8.4 com MVC não só melhora a organização, mas também traz ganhos de segurança, desempenho e escalabilidade. Com boas práticas como tratamento de exceções e modularização, seu sistema estará melhor preparado para futuras manutenções e integrações.

João Coelho
CEO

2024. Ieté Tecnologias do Brasil LTDA. Todos os direitos reservados.

CNPJ 43.427.827/0001-99.

2024. Ieté Tecnologias do Brasil LTDA. Todos os direitos reservados.

CNPJ 43.427.827/0001-99.

2024. Ieté Tecnologias do Brasil LTDA. Todos os direitos reservados.

CNPJ 43.427.827/0001-99.