Unidade de Trabalho - Qual é a melhor abordagem para armazenamento objeto temporário em uma fazenda web?

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

  •  19-09-2019
  •  | 
  •  

Pergunta

Eu preciso criar e implementar algo semelhante ao que Martin Fowler chama de "Unidade de Trabalho" padrão. Tenho ouvido outros se referem a ele como um padrão "Carrinho de compras", mas eu não estou convencido de que as necessidades são as mesmas.

O problema específico é que os usuários (e nossa equipe UI) quero ser capaz de criar e objetos filho Assign (com restrições de integridade referencial no banco de dados) antes de o objeto pai é criado. Encontrei-me com outro dos nossos designers de hoje e que surgiu com duas abordagens alternativas.

a) Em primeiro lugar, criar um objeto pai manequim no banco de dados, e em seguida, criar filhos fictícios e atribuições fictícios. Nós poderíamos usar chaves negativas (nossas chaves normais são todos positivos) para distinguir entre as ovelhas e as cabras em banco de dados. Então, quando os submete usuário toda a transação que temos de atualizar os dados e receber as chaves reais adicionado e alinhados.

Eu vejo vários inconvenientes a este.

  • É algo que provoca perturbações para os índices.
  • Ainda precisamos vir com algo para satisfazer restrições exclusivas em colunas que os têm.
  • Nós temos que modificar muita existente SQL e código que gera SQL para adicionar mais um predicado a um monte de cláusulas WHERE.
  • Alterar as chaves primárias no Oracle pode ser feito, mas é um desafio.

b) Criar tabelas transitórios para objetos e atribuições que precisam ser capazes de participar nestas operações reversíveis. Quando o usuário clica em Enviar, geramos as entradas reais e purgar a idade.

Eu acho que isso é mais limpo do que a primeira alternativa, mas ainda envolve aumento dos níveis de atividade de banco de dados.

Ambos os métodos requerem que eu tenho alguma forma a expirar dados temporários se a sessão é perdida antes executa a usuário enviar ou cancelar pedidos.

Alguém já resolveu este problema de uma maneira diferente?

Agradecemos antecipadamente a sua ajuda.

Foi útil?

Solução

Eu não entendo por que esses objetos precisam ser criados no banco de dados antes que a transação for confirmada, então você pode querer esclarecer com sua equipe UI antes de prosseguir com uma solução. Você pode achar que tudo o que eles querem fazer é informação leitura salvo anteriormente pelo usuário em outra página.

Assim, assumindo que os objetos não precisam ser armazenados no banco de dados antes da submissão, eu dar-lhe planejar C:

loja inicializado objetos de negócios na sessão. Você pode criar todos os filhos que você quer, e só tocar no banco de dados (e configurar referências), quando as necessidades de transação a ser cometidos. Se os dados da sessão vai ser grande (individual ou coletivamente), armazenar as informações de sessão no banco de dados (você pode já estar fazendo isso).

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