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.