Utenti che creano istanze da un modello - esiste un modello software che corrisponde a questo caso d'uso?

5

Sto cercando di progettare un sistema in cui gli utenti costruiscono un oggetto modello e quindi creano molte istanze basate su questo modello. Devono quindi essere in grado di personalizzare ogni istanza, ma ho anche bisogno che siano in grado di apportare modifiche al modello e avere tutte le istanze aggiornate. Questi elementi sono abbastanza complessi, ciascuno costituito da molti componenti che verranno archiviati in numerose tabelle di database.

Vedo due percorsi di implementazione.

  1. Conserva copie complete dei modelli per creare le istanze e migrare gli aggiornamenti alle istanze.
  2. Archivia i record solo per le modifiche e crea ciascuna istanza da una combinazione del modello e delle modifiche all'istanza.

Credo che la prima opzione creerebbe molti dati extra non necessari, tuttavia la seconda strada introduce complessità nella ricerca dei dati.

Sembra che sia stato probabilmente implementato molte volte prima, ma ho difficoltà a trovare molto materiale di lettura. Ci sono nomi comuni per modelli di dati o opzioni di pattern utilizzati nelle implementazioni di tali sistemi?

Sarebbe anche utile qualche consiglio su vantaggi o insidie di ciascuna opzione, altre opzioni o indicazioni sull'implementazione.

modifica

Mi dispiace che non sia stato chiaro. Stavo cercando un nome per l'architettura generale, non un modello di design. Sono gli utenti finali che creano istanze non sviluppatori.

Ad esempio, il sistema potrebbe consentire agli utenti di definire modelli per modellare i processi di produzione di molti articoli. Quindi, in diversi siti in cui le strutture o i requisiti sono diversi, l'utente finale userebbe uno di questi modelli per definire un processo specifico per quel sito. Le cose verranno aggiunte, rimosse e modificate per ciascun sito.

Credo che andrò con l'opzione due sopra menzionata, memorizzando solo le modifiche delta, non le copie complete.

    
posta Adam Butler 28.02.2012 - 10:25
fonte

4 risposte

2

Quando ho letto la tua domanda per la prima volta, mi è venuto in mente Prototipo di GoF .

Tuttavia, in generale i modelli di progettazione si applicano a livelli relativamente bassi (la maggior parte di essi riguarda le relazioni tra solo poche classi). Inoltre, quando si utilizzano i pattern, si utilizza solo l'idea, ma si implementa il proprio codice. Questa idea ti consente semplicemente di implementare il tuo codice più velocemente perché stai codificando qualcosa che è già stato pensato in qualche modo da qualcun altro.

Ciò che stai cercando non è in realtà un modello di progettazione perché la portata / portata di ciò che stai ottenendo è molto più grande. E per quanto ho capito, sei davvero curioso di sapere se qualcuno là fuori ha qualcosa che fa quello che vuoi. In altre parole, stai cercando un framework.

Non sono a conoscenza di alcun framework generico che potresti riutilizzare, ma se sei curioso di sapere se qualcuno ha fatto qualcosa di simile, penso La proprietà di dipendenze di Microsoft che fa parte di WPF si adatta al progetto. Ogni oggetto, che deve derivare dalla classe radice DependencyObject, ha un insieme di proprietà e in alcuni casi questi insiemi sono molto grandi. I valori delle proprietà possono provenire dall'oggetto stesso (quelli che si chiamano valori di istanza) o possono provenire da stili, modelli, temi o impostazioni predefinite del sistema.

Gli oggetti di dipendenza implementano la tua opzione (2). Memorizzano solo localmente ciò che è stato modificato in quell'istanza e ogni valore di proprietà viene calcolato in fase di esecuzione camminando su una serie di fonti da cui potrebbe provenire il valore della proprietà.

Anche se non ci avevo mai pensato, ma credo che potresti ricavare il tuo set di classi da DependencyObject e sfruttare l'intero framework senza codificare nulla di specifico per WPF.

    
risposta data 29.02.2012 - 05:04
fonte
1

Penso che quello che stai cercando sia il Abstract Factory Pattern .

Considera i numeri di telefono:

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

    
risposta data 28.02.2012 - 17:08
fonte
0

Se ti capisco correttamente, l'utente crea pochi modelli, quindi in base a qualche modello crea più istanze "utili" che modificano o aggiungono qualcosa e in seguito cambia il modello e desidera che questa modifica venga riflessa in tutte le istanze basate su tale modello.

Chiamerei l'ereditarietà dei dati.

Perché è come creare una classe base, ereditandola e quindi cambiando la classe base.

    
risposta data 29.02.2012 - 13:16
fonte
-2

La parola che stai cercando è istanziazione

es. Sto istanziando questo modello con questo parametro.

Insieme ai modelli, cerca anche i generici per più materiale di lettura.

    
risposta data 28.02.2012 - 10:37
fonte

Leggi altre domande sui tag