Usuários criando instâncias a partir de um modelo - existe um padrão de software que corresponda a este caso de uso?

5

Estou pensando em criar um sistema em que os usuários criem um item de modelo e, em seguida, criem muitas instâncias com base nesse modelo. Eles precisam, então, personalizar cada instância, mas também preciso que eles possam fazer alterações no modelo e ter todas as instâncias atualizadas. Esses itens são bastante complexos, cada um consistindo em muitos componentes que serão armazenados em várias tabelas de banco de dados.

Eu vejo dois caminhos de implementação.

  1. Armazene cópias completas dos modelos para criar as instâncias e migrar atualizações para as instâncias.
  2. Armazene registros apenas para as alterações e crie cada instância a partir de uma combinação das alterações de modelo e instância.

Acredito que a primeira opção criaria muitos dados extras desnecessários, mas a segunda maneira introduz complexidades na consulta dos dados.

Parece que isso já foi implementado muitas vezes antes, mas estou tendo problemas para encontrar muito material de leitura. Existem nomes comuns para modelos de dados ou opções de padrões usados em implementações de tais sistemas?

Qualquer conselho sobre benefícios ou armadilhas de cada opção, outras opções ou orientação de implementação também seria útil.

edit:

Desculpe, posso não ter sido claro. Eu estava procurando mais um nome para a arquitetura geral e não um padrão de design. São os usuários finais que criam instâncias e não desenvolvedores.

Por exemplo, o sistema pode permitir que os usuários definam modelos para modelar processos de fabricação de muitos itens. Então, em locais diferentes, onde as instalações ou os requisitos são diferentes, o usuário final usaria um desses modelos para definir um processo específico para esse site. As coisas serão adicionadas, removidas e modificadas para cada site.

Acredito que irei com a opção dois mencionada acima - armazenando somente alterações delta, não cópias completas.

    
por Adam Butler 28.02.2012 / 10:25
fonte

4 respostas

2

Quando li sua pergunta pela primeira vez, Padrão de protótipo do GoF me ocorreu.

No entanto, em geral, os padrões de design se aplicam a níveis relativamente baixos (a maioria deles envolve relacionamentos entre apenas algumas classes). Além disso, quando você usa padrões, só usa a ideia, mas implementa seu próprio código. Essa ideia simplesmente permite implementar seu código mais rápido porque você está codificando algo que já foi pensado até certo ponto por outra pessoa.

O que você está procurando não é realmente um padrão de design porque a escala / escopo do que você está conseguindo fazer é muito maior. E pelo que entendi, você está realmente curioso para saber se alguém lá fora tem algo que faz o que você quer. Em outras palavras, você está procurando um framework.

Não tenho conhecimento de nenhuma estrutura genérica que você possa reutilizar, mas se você estiver curioso para saber se alguém fez algo semelhante, acho que A estrutura de propriedade de dependência da Microsoft que faz parte do WPF se encaixa no projeto. Cada objeto, que deve derivar da classe raiz DependencyObject, possui um conjunto de propriedades e, em alguns casos, esses conjuntos são muito grandes. Os valores de propriedade podem vir do próprio objeto (o que você chama de valores de instância) ou podem vir de estilos, modelos, temas ou padrões do sistema.

Os objetos de dependência implementam sua opção (2). Eles armazenam apenas localmente o que foi modificado nessa instância e cada valor de propriedade é calculado em tempo de execução, percorrendo um conjunto de origens de onde o valor da propriedade poderia vir.

Embora eu nunca tenha pensado nisso, mas acho que você poderia derivar seu próprio conjunto de classes de DependencyObject e aproveitar toda a estrutura sem codificar nada específico do WPF.

    
por 29.02.2012 / 05:04
fonte
1

Acho que o que você está procurando é o Abstract Factory Pattern .

Considere os números de telefone:

Phone numbers have a particular rule on which they get generated depending on areas and countries. If at some point the application should be changed in order to support adding numbers form a new country, the code of the application would have to be changed and it would become more and more complicated.

In order to prevent it, the Abstract Factory design pattern is used. Using this pattern a framework is defined, which produces objects that follow a general pattern and at runtime this factory is paired with any concrete factory to produce objects that follow the pattern of a certain country.

link

    
por 28.02.2012 / 17:08
fonte
0

Se eu entendi corretamente, o usuário cria alguns modelos e, com base em algum modelo, cria várias instâncias "úteis" que alteram ou adicionam algo e depois altera o modelo e deseja que essa alteração seja refletida em todas as instâncias com base nesse modelo.

Eu chamaria isso de herança de dados.

Porque é como criar uma classe base, herdá-la e depois mudar a classe base.

    
por 29.02.2012 / 13:16
fonte
-2

A palavra que você está procurando é instanciando

por exemplo. Estou Instantaneamente este modelo com este parâmetro.

Além dos modelos, procure também os genéricos para obter mais material de leitura.

    
por 28.02.2012 / 10:37
fonte