Soy un desarrollador de ASP.NET MVC que acaba de comenzar con mi primer gran proyecto sobre raíles. Sin embargo, estoy confundido acerca de dónde ubicar su lógica comercial. en ASP.NET creo una biblioteca que contiene servicios (diseño impulsado por Dominio) que maneja la lógica de negocios, he escuchado que rails usa un concepto de controlador skinny modelo flaco pero tengo algunos proyectos en ASP.NET que agregan toda la lógica al controlador crearía un gran lío, ¿hay alguna otra manera?¿Dónde entra la lógica comercial en los rieles?
Respuesta
Vaya con el concepto de FatModels y SkinnyControllers. Sus modelos deben saber cómo se comportan y qué deben hacer.
Cuando sus modelos estén demasiado gordos, extráigalos en módulos reutilizables e inclúyalos en su módulo.
- Example of taking a fat controller (with logic) and moving to a model
- Example of taking code from the views and moving into the model
Usted puede probar fácilmente el comportamiento de los modelos que utilizan RSpec (o test/unit o la debería). Luego puede probar que la aplicación se comporta correctamente con Cucumber.
¡Hola lectores de Future! Lo anterior tiene sentido, pero en lugar de seguir engordando tu modelo, echa un vistazo a http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/ –
I encuentra https://github.com/orgsync/active_interaction muy prometedor. –
Puede poner la lógica de negocios en cualquier lugar que desee (incluso en las vistas, aunque esa es una mala idea).
Yo diría que si la lógica está vinculada a un objeto del mundo real, entonces póngalo en el modelo. De lo contrario, use el controlador. Pero depende de usted determinar cómo hacerlo para su aplicación. Los modelos son para modelar cosas, y los Controladores son para controlar cosas.
"Business Logic" o algunos podrían llamarlo "Domain Logic" no pertenece a ningún lugar cerca de Rails y/o su proyecto .NET MVC. Rails y MVC deberían depender de su Dominio, no al revés. Recomendaría leer sobre la arquitectura de cebolla de Jeffery Palermo o ver "Arquitectura de los años perdidos" de Robert Martin. (Creo que esa es la charla de todos modos). Probablemente haya más recursos que eso, pero te agradecerás más adelante por tratar tanto a Rails como a .NET MVC como los frameworks de terceros que son, y no como la casa principal de tu aplicación.
he visto la charla y he escuchado esta idea expresada muchas veces, pero nunca he visto un ejemplo concreto o una demostración de cómo lograr esto. como principiante, tiene sentido en principio, pero realmente no puedo conceptualizar cómo llevar esto a la práctica. ¿Tiene un ejemplo de una aplicación de rieles que sigue esta práctica que yo podría mirar, o un artículo con un ejemplo más concreto? –
creo que este artículo de blog proporciona una buena visión general de una estrategia de incorporar el diseño de dominio impulsada con en el marco rieles: http://www.smashingboxes.com/domain-logic-in-rails/
TL; DR
Refactor sus modelos carriles clásicos en los repositorios, y utilizar una capa de fachada en los controladores para interactuar con su modelo de dominio.
Estoy luchando con esto un poco yo mismo, y por mucho que el patrón de controlador de grasa parece prevalecer, cualquier cosa "grasa" en el software parece ser un olor, violando la responsabilidad individual.
- 1. Aplicaciones WCF/Cliente: ¿a dónde debe ir la lógica comercial?
- 2. en MVC/MVP/MVPC ¿dónde ubicas tu lógica comercial?
- 3. ¿Es buena idea la lógica comercial en los constructores?
- 4. ¿Lógica comercial y de aplicaciones?
- 5. Patrón de repositorio y lógica comercial
- 6. Rieles ¿Lógica en controladores?
- 7. Lógica comercial compleja en el repositorio
- 8. oo pregunta - lógica del controlador de mezcla y lógica comercial
- 9. Establecer un valor predeterminado: ¿lógica de presentación o lógica comercial?
- 10. ¿Dónde entra el inicializador Rails en una joya?
- 11. CakePHP - dónde poner la lógica del servicio
- 12. ¿Debe colocarse la lógica comercial en el dominio o los servicios?
- 13. dónde ubicar la lógica específica de los recursos
- 14. ¿Dónde debe implementarse la lógica de validación?
- 15. Rieles: ¿dónde colocar los archivos de datos?
- 16. Rieles: ¿Dónde debo calcular los atributos derivados?
- 17. Enganche en el registro de Drupal y valide la información del usuario contra la lógica comercial
- 18. Dónde poner la lógica de negocio en Django
- 19. ¿Dónde puedo obtener la versión completa de los rieles 3?
- 20. dónde poner la lógica de validar? En servicio o repositorio?
- 21. ¿Por dónde empezar para Jruby en los rieles?
- 22. ¿Dónde entra la salida de la consola en una aplicación alojada en IIS?
- 23. ¿Dónde colocar código de manipulación de datos y lógica de negocios en la aplicación ASP.NET MVC?
- 24. ¿Qué entra en la función principal?
- 25. ¿Dónde debe ubicarse la lógica de negocios al usar Doctrine 2 y Zend Framework
- 26. Dónde colocar scripts de utilidad en rieles
- 27. Rieles: ¿Dónde se define "params"?
- 28. ¿Dónde entra la verificación de validación en el patrón de repositorio?
- 29. Dónde poner los métodos reutilizables para el acceso de los controladores en los rieles
- 30. ¿Dónde almacenar datos confidenciales en la aplicación de rieles públicos?
¿qué quieres decir con "lógica de negocios"? – sethvargo
también puedes intentar crear módulos y ponerlos en tu directorio lib – stephenmurdoch