¿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

¿Cuáles son todas las capacidades, soporte y características proporcionadas o cuáles deberían proporcionarse en un marco de automatización de prueba de aplicaciones web?

¿Qué es un div dinámico en HTML / Javascript y para qué se utiliza?

¿Qué plataforma / tecnología funciona mejor para una aplicación web de listado de propiedades inmobiliarias?

Si hago una aplicación web en Angular2 que se ejecuta en AWS (S3, DynamoDB), ¿todavía necesito hacer alguna programación del lado del servidor (como Play o PHP o Python)?

¿Puedo hacer una aplicación web ERP usando Ruby o Node.js? ¿Cuál es mejor?

Cómo hacer que una aplicación web escalable sea un principiante

¿Cuál es una gran herramienta basada en navegador para dibujar árboles de decisión?

¿Cuáles son ejemplos de páginas de inicio de aplicaciones web bien diseñadas?

¿Qué partes de una aplicación web deben asegurarse con firmas digitales y qué partes están bien con hashes o MAC?

¿Por qué los desarrolladores dicen que Ruby on Rails tendrá demanda en 2015 si el índice Tiobe registra una disminución?

¿Cuáles son actualmente las mejores opciones para JavaScript del lado del servidor?

¿Cómo se compara Drupal 7 con los marcos de Code Igniter y Yii para aplicaciones web?

¿Cuáles son sus opiniones sobre el futuro del desarrollo web y el desarrollo de software en India?

¿Qué marco debe aprender un principiante dado que hay tantas opciones: Node.js, AngularJS, MeteorJS, Backbone, etc.?

¿Cuáles son algunas buenas herramientas o aplicaciones para autores de no ficción?