Dúvida com modelagem OO

2 respostas
hlegius

Salve turma !

"Modelando" umas classes aqui, acabei chegando num ponto onde fiquei com dúvida sobre o que fazer. Eu até achei uma saída que daria certo, mas não tenho certeza se é uma forma boa de usar, bem, vamos lá:

Tenho Produtos onde um Cliente pode solicitar uma Amostra deste produto. (3 entidades: Produto, Cliente e Amostra)
Amostra tem agregado um Cliente e um Produto (1 amostra = 1 produto = 1 cliente - sempre !)

Cliente gostando da Amostra, solicita o Pedido do mesmo. Entretanto, ele poderá aprovar várias amostras e fechar tudo num mesmo Pedido.
Então: 1 Pedido = 1 ou * Amostras (só existe Pedido de amostras aprovadas, nunca Produto vira direto pedido)

Inicialmente eu pensei:

Pedido
-- Amostra[] amostras
-- date data
-- ...

Pensei isso com o seguinte pensamento: "Amostra já tem cliente e produto, então, não preciso jogar novamente isto em pedido". Não sei se é legal isto, mas por fim acabei pensando em outra solução, até porque essa tem um problema: a quantidade de cada Amostra aprovada. Logo:

PedidoItem
-- Amostra amostra
-- int quantidade
-- float valor

Pedido
-- PedidoItem[] itens
-- date data
-- ...

Penso ser o mais prudente a ser fazer, não sei, parece óbvio demais hahaha...
Dúvidas:

1. Jogo o Cliente para Pedido.cliente ou deixo em Amostra mesmo ? (Pedido.getItem(0).getAmostra().getCliente().getNome()) [Acho que isto quebra um príncipio de projeto - aquele de que não deve-se conhecer muitos vizinhos, não ?]

2. Repare que no PedidoItem tem um "float valor". Esse valor é baseado no Produto, pois tenho uma regra interna lá: Se o cara pedir 100 unidades é um preço, se pedir 200 é outra se pedir + de 300 é outra. O produto sabe das quantidades VS Preço, então esse "valor" em PedidoItem deve ser um calculo feito pelo Produto, penso. Ou não ?

Dúvidas de principiante :/
Alguém pode me dar uma mão ?

Abraços !

2 Respostas

Guilherme_Gomes
  1. Um Cliente faz um Pedido com N Amostras, logo o cliente está ligado com o pedido, e o pedido às amostras e não às amostras diretamente ao pedido.

  2. O Pedido recebe o valor por uma outra classe, que não é produto. Seria uma classe de negócio que fecha o pedido do cliente e calcula o valor total, setando pedido.setValor().

hlegius
Guilherme Gomes:
1. Um Cliente faz um Pedido com N Amostras, logo o cliente está ligado com o pedido,
Então é necessário haver uma relação direta: Pedido.cliente e não "aproveitar" o relacionamento Amostra.cliente.
..e o pedido às amostras e não às amostras diretamente ao pedido.
Sim, o pedido está relacionado com as amostras que irão compor o mesmo. Mas realmente não sei o que mudaria no modelo que citei no tópico. Alguma sugestão ?
2. O Pedido recebe o valor por uma outra classe, que não é produto. Seria uma classe de negócio que fecha o pedido do cliente e calcula o valor total, setando pedido.setValor().
Então essa regra ficaria na classe responsável por criar o novo Pedido.

A ideia de se trabalhar com PedidoItem parece-me correta, ou não ?

--- Edit ----

Estive rabiscando uns papéis aqui e pensei nisto:

Pseudo-Java

public class Teste {
     public static void main(...) {
          pedidoItem.adiciona(Amostra, qtde);
          pedidoItem.adiciona(Amostra_outra, qtde2);
          pedido.adiciona(pedidoItem);
          pedido.setCliente(Cliente);
     }

}


public class PedidoService {

     public Pedido cria(Pedido pedido) {
          // verificacoes procurando itens e cliente (uma vez que Pedido compõe ambos)
          itens = pedido.getItens();
          
          while (itens.hasNext()) {
               float preco = itens.getProduto().precoPara(itens.qtde);
               itens.setPreco(preco);
          }

          // continua...
     }
}

Funcionar, funcionaria, mas o relacionamento ali estaria correto, penso. O que acham ?

Abraços !

Criado 25 de fevereiro de 2009
Ultima resposta 25 de fev. de 2009
Respostas 2
Participantes 2