Pergunta

Você reformulado a partir de um ActiveRecord a um DataMapper padrão? Que condições levaram o switch? Estou interessado principalmente em aplicações baseadas na web, mas gostaria de saber os desafios que acompanham tal movimento em qualquer ambiente.

Foi útil?

Solução

Eu realmente gosto o padrão ActiveRecord por sua simplicidade. No entanto, I foram se afastando para aplicações web maiores. Acho que como um projeto baseado ActiveRecord se torna mais complexo o ActiveRecord objetos se tornam grandes e carregado com muito código.

Com a introdução de um padrão Repository (essencialmente um mapeador de dados) as classes de modelo de domínio tornam-se mais simples e a lógica de acesso de mapeamento de dados / dados são mantidos separados.

Além disso, é muito difícil (impossível?) Para escarnecer ActiveRecord objetos por causa de seu usuário de métodos estáticos.

Outras dicas

Eu uso um quadro que fornece Mesa Gateway de Dados e Row Data Gateway como built-in classes que são fáceis de usar, porque tudo o que tenho para especificar é a chave primária (se não apenas 'id') e o nome da tabela (se não for o mesmo que o nome da classe). No entanto, tenho descoberto recentemente no processo de refatoração que esses padrões começam a degradar o momento que o mapeamento mais complexo tem que ocorrer entre o domínio eo banco de dados.

Por exemplo, eu estou atualmente refatoração do código para um site para usar Data Mapper para que eu possa usar Herança de Tabela Única (usa herança Mapping). Basicamente, a qualquer hora a relação entre banco de dados e domínio torna-se mais complexo do que um-para-um, eu fortemente considerar o uso Mappers de dados.

Eu escrevi um sistema de compilação integrado sentado em cima de PDE-compilação usando acampamento . Eu inicialmente utilizado ActiveRecord, mas eu precisava de bloqueio não-acesso thread-safe ao banco de dados, então eu passou a usar Data Mapper.

Eu tive o meu quinhão de dor de bugs, mas as versões mais recentes parecem bastante estável.

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