Otros han enumerado muchos motivos posibles (y explicaciones adecuadas de por qué la mayoría de estos no son generalmente una buena idea). Permítanme publicar un ejemplo de un (más o menos) uso válido de los métodos init, que en realidad tiene que ver con el tiempo.
En un proyecto anterior, teníamos muchas clases de servicio y objetos, cada uno de los cuales formaba parte de una jerarquía, y se cruzaban las referencias de varias maneras. Por lo general, para crear un ServiceA, necesitaba un objeto de servicio principal, que a su vez necesitaba un contenedor de servicio, que ya dependía de la presencia de algunos servicios específicos (posiblemente incluyendo ServiceA mismo) en el momento de la inicialización. El motivo fue que durante la inicialización, la mayoría de los servicios se registraron con otros servicios como detectores de eventos específicos y/o notificaron a otros servicios sobre el evento de una inicialización exitosa. Si el otro servicio no existía en el momento de la notificación, el registro no se realizó, por lo que este servicio no recibiría mensajes importantes más tarde, durante el uso de la aplicación. Con el fin de romper la cadena de dependencias circulares, tuvimos que utilizar métodos de inicialización explícitos separados de los constructores, por lo tanto efectivamente haciendo que la inicialización del servicio global sea un proceso de dos fases.
Por lo tanto, aunque este modismo no se debe seguir en general, en mi humilde opinión tiene algunos usos válidos. Sin embargo, es mejor limitar su uso al mínimo, utilizando constructores siempre que sea posible. En nuestro caso, este fue un proyecto heredado, y todavía no comprendemos completamente su arquitectura. Al menos el uso de los métodos init se limitaba a las clases de servicio: las clases regulares se inicializaban mediante constructores. Creo que podría haber una manera de refactorizar esa arquitectura para eliminar la necesidad de métodos de init de servicio, pero al menos no veía cómo hacerlo (y para ser sincero, teníamos problemas más urgentes que tratar en el momento en que estaba parte del proyecto).
Si su propia compañía ni siquiera puede explicarlo, huelo mal código. – Mike
Parece que falta un 'vacío'. – sellibitze
Estoy de acuerdo con Mike. Comience a buscar un trabajo. – sbi