Implementando Composições na WEB

Por composição entendam o mesmo conceito que é utilizado na UML.
Temos composições e agregações. Composição é um agregação forte, i.e., onde uma coleção de objetos só tem sentido de existir se o objeto do qual pertence tbm existir.
Aqueles exemplos clássicos:

Agregação:
TimeDeFutebol [tem vários] JOGADOR
É uma agregação, pois um Jogador pode existir caso o Time seja excluido

Composição:
Motor [tem vários] ParteDeMotor
É uma composição, pois se eu excluir o Motor, quero que as partes tbm o sejam. Mais ainda, não há sentido criar uma Parte sem estar associada a um Motor antes.

Queria discutir com vcs como implementar telas (web) para composições.
Por ex, imaginem que estou na tela de cadastro de Motor. Imaginem tbm que tenho uma tela de cadastro de ParteDeMotor. No entanto, só posso acessar essa tela após ter selecionado um Motor antes, pois não faz sentido criar uma Parte sem um Motor.

Qual o melhor jeito de fazer uma tela dessas?
Um possivel fluxo seria:
Cadastro de Motor -> Seleciona Motor na Lista -> Cadastro de Parte -> Operações diversas -> Retorna para tela de Cadastro de Motor.

Neste caso, guardariamos o estado da tela do Motor onde? Sessão? Abririamos um pop-up para a Tela de cadastro de partes? Deste modo não perderiamos o estado da tela de Motor.

Uma outra solução seria o uso intensivo de AJAX.

Como vcs implementam?

Valeu, galera.

Olha, cara, estou desenvolvendo um sistema de SAC para uma loja de informática.

Através dele os funcionários poderão criar Ordens de Serviço (OS) fora do local de trabalho. Numa OS há composição, pois o funcionário têm de especificar o cliente, o equipamento e a filial. Para os 3 itens existe um cadastro. A maneira que eu implementei foi assim (com base na forma que eu fiz tu podes pensar como fica melhor pra ti):

Primeiramente eu criei, para cada item (cliente, equipamento e filial) uma página específica formatada para ser um popup. Estes popup’s são simples janelas que mostram os dados paginados com botões para deslocamento entre as páginas. Cada item na tabela da página é um link para uma função JavaScript.

Quando o cara clica em um cliente no popup de clientes, eu executo o seguinte código:

opener.window.setClient(clientId, clientName); // clientId e clientName são parâmetros que o item na tabela passa para a função
window.close(); // o popup se fecha

Então, na janela onde estou incluindo a OS, eu tenho a função que pega os dados do popup:

function setClient(clientId, clientName)
  {
   document.getElementById("clientId").value = clientId; // é um campo hidden
   document.getElementById("clientName").innerHTML = clientName; // é uma tag SPAN apenas para exibição
  }

Dessa forma eu faço a composição!

Entendi, vc usa pop-ups para nao perder o estado das suas páginas anteriores.
è uma ideia que eu gosto muito tbm, no entanto, no caso de vc ter composições dentro de composições, fica um monte de pop-ups abertos e o usuario pode se perder.
Mas mesmo assim eu concordo com vc e acho que é um dos melhores jeitos de implementar cenarios desse tipo.

Legal, cara.

Como assim composição sobre composição?

Deixa eu explicar melhor o meu formulário de OS e você vai entender como fiz a composição de objetos compostos.

Eu simplesmente faço um lookup (o link que abre a popup) ser dependente de outro.

No meu esquema aqui, os equipamentos são dependentes do cliente. Então como faço: quando o formulário é aberto, o link para abrir o popup dos equipamentos está desativado. Quando o cara seleciona um cliente, a função setClient verifica se foi retornado um cliente válido e, se foi, o link para os equipamentos é liberado. Quando o link para os equipamentos é clicado, a URL é montada dinamicamente, assim:

<a href"#" onclick="selectEquipment(EQUIPMENTS_URL + "?client.id=" + document.getElementById("client.id").value);">selecionar equipamento</a>

Note que eu estou passando para a popup (no caso a função selectEquipment é que abre o popup) a ID do cliente. Então, usando esse parâmetro, eu carrego no popup somente os equipamentos relacionados àquele cliente.

Não seria isso que você se referiu?

Desa forma você teria sempre no máximo 1 popup aberto. Só teria o trabalho de controlar uma composição sobre a outra.