Design pattern per la configurazione degli oggetti

0

Contesto

In un'applicazione Cocoa che sto sviluppando, ho bisogno di caricare un modello dati definito in file plist. Quindi, ho qualcosa come:

root (Array)
---- item (Dictionary)
-------- name : "objects" (string)
-------- prefab : "object" (string)
-------- children : (Array)
...
---- item (Dictionary)
-------- name : "actions" (string)
-------- prefab : "action" (string)
-------- children : (Array)

Quindi, il precedente modello di dati viene caricato nel codice per diventare una rappresentazione dell'oggetto utilizzando le primitive del linguaggio (matrici, dizionari, stringhe, ecc.). Nessun corso personalizzato qui. Quando carico quel modello, so che un elemento nella vista tabella può avere figli se è stata impostata la chiave "prefabbricata". Quando viene premuto "aggiungi bambino", vado nei prefabbricati (qualche altro plist) e recupero la struttura del prefabbricato. per esempio:

root (Array)
---- item (Dictionary)
-------- name : "object" (string)
-------- parameters : (dictionary)
------------ key "object_id" : value ""
------------ key "x_position" : value 0
...

Come puoi vedere, dal prefabbricato nel primo modello, posso andare al secondo plist e recuperare una struttura definita in un plist. Tutto caricato utilizzando una libreria plist, senza alcuna creazione di sottoclassi. Esiste una singola classe di fabbrica prefabbricata che contiene le strutture prefabbricate e crea un'istanza e inizializza l'oggetto dal prefabbricato con i dati di configurazione.

Problema

Spero che tu veda il grave pericolo in questo progetto. Il modello contiene sia dati generati dall'utente che dati di configurazione !! EEEEK !!! ... Sheesh, è così brutto ...

Il problema mi ha ossessionato quando ho iniziato ad esportare il modello dopo che l'utente dell'app ha interagito con il modello attraverso l'interfaccia utente. Il modello esportato conterrà i dati di configurazione (come la chiave prefabbricata), che rende i dati esportati rigidi e non aggiornabili. Se dovessi cambiare la chiave prefabbricata nella versione successiva dell'app, in qualcos'altro, e tu carichi un vecchio modello, quel modello caricherà le vecchie configurazioni con esso, nel nostro caso, facendo riferimento al vecchio prefabbricato.

Domanda

Ho bisogno di aiuto per trovare un modello di progettazione appropriato che faccia clic con questo progetto basato sui dati che dispongo, fornendo i dati di configurazione da un file separato e in qualche modo collegandolo al modello di dati.

    
posta Mazyod 12.12.2013 - 23:41
fonte

1 risposta

0

Funnily, mentre scrivevo la parte di domanda del post, ho scritto questo:

I can't create subclass for each data entity (object, action, ... etc), but I can create a generic subclass that fits all the objects.

Questo è tutto!

Anche se la fabbrica prefabbricata può configurare al volo l'oggetto istanziato, può farlo solo quando l'oggetto viene creato per la prima volta. Quando viene caricato dal modello, è più o meno de-serializzato, il che significa che ho dovuto attraversare l'albero del modello ... Il che era così brutto, non riuscivo a scrivere tale codice. Scrivendo una sottoclasse personalizzata per domarli tutti, posso averla configurata anche quando caricata da un modello di dati serializzato.

(Osservazioni finali: non volevo che tutto ciò che digitava nella domanda venisse sprecato, inoltre stackexchange promuove Q & Uno stile che diffonde la conoscenza di qualcosa, quindi, yay)

    
risposta data 12.12.2013 - 23:41
fonte

Leggi altre domande sui tag