¿Debo poner todo el código en mis controladores cuando estoy escribiendo una aplicación web?

Gran pregunta; tanto en el código front-end como en el back-end, veo controladores que han sobrepasado sus límites: llamémoslo el anti-patrón “controlador hinchado”, y tenga en cuenta que está fácilmente en la lista de los 10 más comunes. antipatrones.

Nada señala un equipo de ingeniería junior más rápido que un controlador LOC de más de 2000.

Permítame presentarle la noción de responsabilidad única: cada módulo / clase en su sistema debe tener una responsabilidad.

Entonces, ¿cuál es la responsabilidad de un controlador? En el front-end, es hacer que el modelo esté disponible para la vista y actuar como un proxy de la vista al modelo. (En el back-end, lo llamo un “http-proxy”: su única responsabilidad es recoger información de la solicitud http, enrutarla al controlador apropiado y enviar la respuesta de vuelta por el cable).

Como puede ver, en realidad se trata de múltiples responsabilidades, por lo que el patrón MVC no es realmente particularmente bueno. Dicho esto, puede mantener las cosas limpias manteniendo la superficie de responsabilidad de sus controladores lo más pequeña y enfocada posible:

  • Los modelos deben traerse a través de servicios, no código en el controlador
  • Las acciones deben ser enrutadas a los servicios por el controlador, no implementadas en el propio controlador
  • Siempre tenga en cuenta la guía de que el controlador simplemente está allí para mediar entre el modelo y la vista. Cualquier lógica real, como la mutación del modelo a través de acciones o la mutación del modelo con fines de UI, pertenece a otro lugar, como en los servicios y modelos de vista.
  • Y, por supuesto, siempre tenga en cuenta la capacidad de prueba de sus controladores. Si los mantiene simples, serán comprobables. Cuanto más agregue a sus controladores, más difícil será probarlos.

No, no te recomiendo que pongas todo tu código en los controladores. Debido a que hace que sea muy difícil de entender y mantener, ya que habrá una gran cantidad de lógica empresarial en los controladores, supongamos que desea usar un código que existe en un controlador en otro controlador, tendrá que copiar y pegar ese código y usted sabe Es una mala práctica.

Recuerde esto, la lógica de negocios debe ponerse en algo así como los servicios. Mantenga la mayor parte de la lógica empresarial fuera de los controladores y póngala en un servicio o fábrica.

No. Lo ideal es que solo tengan conversión de datos, validación, lógica de flujo de página (si la hay) y llamadas a la capa de servicio, donde pertenecen todas las lógicas comerciales y el control de transacciones. La capa de acceso a datos es para (¿adivina qué?) El acceso a datos.

Volcar todo el código en los controladores rápidamente conduce a un desorden que es costoso, si no imposible, de extender y mantener.

More Interesting

¿Dónde se usan las gramáticas JAPE? ¿Qué aplicaciones usan gramáticas JAPE o sistemas similares?

Herramientas para desarrolladores web de Chrome o Firebug, ¿cuál es su herramienta favorita para el desarrollo web? ¿Y por qué?

¿Qué hace realmente un marco web?

¿Se puede construir una aplicación web en Python?

¿El esquema de nombres REST estándar es simplista?

¿Crees que los IDE basados ​​en la web son el futuro de los IDE? ¿Cuáles son las ventajas y desventajas de los IDE web? ¿Qué características tienen mucho más sentido en un IDE web? ¿Cuáles son los mejores IDE basados ​​en la web?

¿Qué significa una configuración de producción para una aplicación web?

¿Recomienda codificar usando Java o con otros lenguajes de script?

¿Cuáles son los flujos de trabajo óptimos para implementar la aplicación web?

¿Cuál es la mejor manera de construir un sitio web atractivo y que funcione bien?

¿Cuáles son algunas metodologías de diseño empleadas antes de comenzar la codificación en una aplicación web?

¿La descarga y la ejecución de aplicaciones reemplazarán el uso de un navegador web?

Somos una startup que desarrolla una aplicación web para la industria de la construcción. La aplicación que se aloja en la nube. ¿Crees que necesitamos un ingeniero de seguridad como función separada? ¿Por qué?

Soy nuevo en el desarrollo web, ¿cómo puedo publicar mi aplicación web en el mundo?

Durante la prueba Beta de su aplicación web, ¿cuándo sabe que está listo para iniciar?