¿Por qué Rails crea un controlador para cada solicitud?

De mi pregunta anterior entendí que Rails crea una instancia de controlador para cada solicitud.

Mi pregunta es porque este tema está relacionado con el diseño del proyecto en el que estoy trabajando:

¿Por qué Rails crea una nueva instancia de

class SomeController < ApplicationController; end 

procesar cada solicitud entrante? ¿Por qué no crear objetos singleton y enviar solicitudes a este? ¿Esto parece más eficiente ya que no desperdiciaremos recursos en la asignación y limpieza de objetos para solicitud?

La sobrecarga de crear una instancia de un nuevo controlador es insignificante, y significa que no hay un estado compartido accidentalmente entre dos solicitudes completamente no relacionadas. Cualquier “ahorro” en el tiempo del procesador sería más que compensado por el potencial de producir errores devastadores.

Recuerde que los controladores son para almacenar el estado específico de la solicitud. Reutilizar los controladores requeriría que reinicies cada @variable hayas establecido, al comienzo de cada acción. De lo contrario, algo como @is_admin = true podría terminar siendo configurado y nunca borrado. Los errores menos artificiales que en realidad estarías presentando serían mucho más sutiles y agotadores en el tiempo del desarrollador.

Estás viendo optimizaciones donde no hay ninguna. Algo debe mantener el estado y restablecerlo entre solicitudes, o tienes esta pesadilla de estado compartido accidentalmente. Si persiste las instancias de controlador entre solicitudes, simplemente está presionando el trabajo de mantener / restablecer el estado a un nivel inferior, donde la respuesta probablemente será crear una instancia nueva de alguna clase de administración estatal para cada solicitud. Las computadoras son muy buenas para asignar y liberar recursos, así que nunca se preocupe por eso hasta que realmente sepa que es un cuello de botella. En este caso, crear una instancia de un nuevo controlador para cada solicitud es fácilmente la elección correcta.

En el caso de Rails, ser capaz de usar @variable = value es una ganancia importante desde el punto de vista de claridad de código y facilidad de uso, y esto requiere más o menos descartar cada instancia de un controlador cuando se completa la solicitud.