Pergunta de fábrica de objetos - usando informações de consulta de banco de dados para criar objetos

StackOverflow https://stackoverflow.com/questions/3808052

Pergunta

Eu tenho vários objetos, como produtos, pedidos etc. Quando recebo informações do meu banco de dados, tomo uma linha e crio um dos tipos de objetos. Eu então trabalho com esse objeto criado. Eu li isso é chamado de fábrica.

Existe alguma vantagem em fazer isso? Especialmente em um idioma datilizado como o PHP?

Obrigado

EDIT: É aqui que recebo agnosticidade do banco de dados? É isso que um ORM essencialmente faz?

Foi útil?

Solução

Ao criar seus objetos a partir das consultas do banco de dados, você está definindo o mapeamento entre seus objetos e o banco de dados relacional. É exatamente isso que o software ORM faz.

Ao fazer isso e garantir que seus objetos nunca acessem diretamente o banco de dados, mas, em vez disso, use suas funções/objetos de acesso ao banco de dados, você está protegendo seu código de alterações de duas maneiras:

  • As alterações no seu esquema de banco de dados não serão ripilistas através do seu código. Em vez disso, as alterações do código estarão localizadas apenas nos objetos de acesso ao banco de dados.

  • Você pode mudar para um DBMS diferente implementando uma nova camada de banco de dados que segue a mesma interface que a original. Seus outros objetos não exigirão alterações.

Eu acho que, nesse sentido, você ganha alguma agnosticidade de banco de dados, mas provavelmente será melhor usando uma biblioteca de banco de dados que fornece essa agnosticidade pronta para uso.

Na minha opinião, a vantagem é que você está trabalhando com objetos e obtém todas as vantagens que uma linguagem orientada a objetos oferece. Você pode ler a lógica do domínio em um nível superior (em termos de objetos que você definiu) sem peneirar através de consultas de banco de dados. Escrever o orm você mesmo pode ser difícil, mas existem ferramentas por aí que ajudam nisso.

Este é o caminho que normalmente segui, mas não faço nenhum desenvolvimento de PHP, por isso não posso dizer o quão bem ele se aplica a esse idioma.

Outras dicas

O que você está descrevendo é uma implementação de uma camada de acesso a dados - não parece um exemplo do Padrão de método de fábrica, nem o Padrão de fábrica abstrato.

Sim, o ORMS preenche a lacuna de objetos para bancos de dados relacionais e pode servir como sua camada de acesso a dados. Lembre -se de que qualquer ORM que você usa possui certos prós/contras/limitações. Dependendo da sua experiência e requisitos, escrever sua própria camada de acesso a dados às vezes é uma boa ideia; Não sinta que você precisa usar um ORM de terceiros.

Sim, uma boa camada de acesso a dados facilita a troca do seu mecanismo de armazenamento (diferentes bancos de dados, XML, arquivos planos, o que for) sem alterar sua lógica de negócios, interface do usuário ou outro código.

Independentemente de idiomas soltos ou fortes, se você estiver trabalhando em um idioma OO, será muito mais fácil gravar código usando objetos de dados (fornecidos por uma camada de acesso a dados ORM ou Homegrown). Tenho certeza de que é possível escrever um sistema sem camada de acesso a dados, onde sua camada de negócios trabalha diretamente com o banco de dados. Mas provavelmente será mais desafiador implementar e manter.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top