Utilizziamo la serializzazione XML per memorizzare le impostazioni delle classi. Ogni classe-ambiente ha (ma non fa riferimento) la corrispondente classe di implementazione. Quindi possiamo facilmente creare una "DLL di impostazioni" senza alcuna dipendenza. Ecco perché non vi è alcun codice di implementazione incluso all'interno delle classi di impostazione.
Quale sarebbe il modo migliore per costruire classi di implementazione quando si dispone di un array di classi di impostazione?
Riflessione-attivatore? Visitatore? Qualunque altra cosa? Oppure puoi proporre un altro approccio per avere classi di impostazioni indipendenti dall'implementazione?
Aggiunto:
- Abbiamo una struttura complessa con matrici e oggetti nidificati che non funziona bene con
System.Configuration
. - Non stiamo serializzando direttamente su un file.
Struttura di esempio:
public class GameMap
{
public string Name { get; set; }
public ItemSet[] Lootables { get; set; }
public class ItemSet
{
public Item[] Items { get; set; }
public abstract class Item
{
public float Probability { get; set; }
public Vector3 Position { get; set; }
}
public class Coin : Item
{
public int Count { get; set; }
}
public class HealthRestoration : Item
{
public bool ApplicableToDragons { get; set; }
}
}
public Ability[] Abilities { get; set; }
public class Ability
{
public string Name { get; set; }
public int Cooldown { get; set; }
public Effect[] Effects { get; set; }
}
public abstract class Effect
{
// some nested data...
}
}
Ogni istanza di impostazione può essere utilizzata per creare un'istanza di implementazione corrispondente. Per esempio. HealthRestoration
implementation-class contiene la logica per ripristinare effettivamente i punti ferita di un personaggio del gioco e deve avere la sua istanza di impostazione per sapere se l'elemento è ApplicableToDragons
.