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 )?