Diciamo che sto facendo un'applicazione 2D con il seguente design:
C'è l'oggetto Livello che gestisce il mondo, e ci sono oggetti del mondo che sono entità all'interno dell'oggetto Livello.
Un oggetto del mondo ha una posizione e velocità, oltre a dimensioni e una trama. Tuttavia, un oggetto mondo espone solo% proprietà% di%. Le proprietà get
sono private (o protette) e sono disponibili solo per le classi ereditate.
Ma ovviamente Level è responsabile di questi oggetti del mondo e deve in qualche modo essere in grado di manipolare almeno alcuni dei suoi setter privati. Ma al momento, Level non ha accesso, il che significa che gli oggetti del mondo devono cambiare i suoi setter privati in pubblico (violando l'incapsulamento).
Come affrontare questo problema? Dovrei semplicemente rendere tutto pubblico?
Attualmente quello che sto facendo è avere una classe interna all'interno dell'oggetto del gioco che fa funzionare set
. Quindi, quando Level ha bisogno di aggiornare la posizione di un oggetto, va qualcosa del tipo:
void ChangeObject(GameObject targetObject, int newX, int newY){
// targetObject.SetX and targetObject.SetY cannot be set directly
var setter = new GameObject.Setter(targetObject);
setter.SetX(newX);
setter.SetY(newY);
}
Questo codice sembra eccessivo, ma non sembra giusto avere tutto pubblico in modo che tutto possa cambiare la posizione di un oggetto, per esempio.