Sto usando Swift e mi sto interrogando sui concetti di Estensione e delegazione . Recentemente ho trovato un caso in cui uno di questi due concetti potrebbe essere applicato. Ciò ha ricordato il principio della "composizione sull'ereditarietà", che insegna che una relazione "ha-a" può essere preferita a una relazione "è-a".
Ho riscontrato un caso in cui è sempre un oggetto di un tipo specifico che dipende da un oggetto che conforma un determinato protocollo, consentendo quindi l'utilizzo sia di Extension che di Delega.
Ad esempio, ho un UIViewController che dipende da una sottoclasse di UIView. Diciamo che adottiamo il seguente protocollo:
protocol ViewInteraction {
func interact()
}
Questo protocollo sarà conforme alla sottoclasse UIView, ad esempio InteractedView
. E qualsiasi UIViewController
potrebbe dover interagire con questo InteractedView
.
In questi tipi di situazioni, quale è un buon valore predefinito: il pattern di delega o il pattern di estensione? Cioè, dovrei usare lo schema Delega - lasciare che InteractedView
lo rispetti e lasciare che la sottoclasse UIViewController
manipoli una proprietà ViewInteraction
- o dovrei seguire il modello Estensione ed estendere UIViewController
per conformare il ViewInteraction
protocollo (e chiama InteractedView
)?