La delega nel codice è la stessa cosa nella vita reale; stai consegnando un compito a qualcuno o qualcos'altro da eseguire. Nelle interfacce utente che gestiscono eventi, questa è una buona cosa, dato che il codice dietro l'interfaccia utente è già abbastanza complesso e la delega aiuta a evitare una grande palla di fango. Per quanto riguarda la pratica generale, spingo più logica possibile verso il codice esterno, piuttosto che mantenerlo nell'interfaccia utente.
Detto questo, avere una forma vicina / non autorizzare se stesso non è esattamente una scienza missilistica, e così facendo incapsula la funzionalità della chiusura all'interno della forma stessa, piuttosto che dover coinvolgere un altro oggetto solo per chiudere la forma. Questa è una complessità extra senza ulteriori vantaggi, specialmente se si tratta della cosa solo che stai delegando all'oggetto esterno.
Quindi direi se il modulo si sta chiudendo a causa di un'interazione nel o sul modulo (ad esempio, l'utente che fa clic su un pulsante di chiusura o un timer nel modulo), quindi basta chiuderlo nel codice del modulo e essere fatto con esso Se il modulo si sta chiudendo a causa di un'azione esterna, lascia che l'azione esterna lo chiuda.