¿Dónde debo poner mi código personalizado cuando no encaja en el modelo o controlador? -- model-view-controller campo con ruby-on-rails-3.1 camp Relacionados El problema

Where should I put my custom code when it doesn't fit into the model or controller?


0
vote

problema

Español

Soy bastante nuevo en los rieles, y mis mayores preocupaciones aún son dónde colocar mi lógica para mantener un diseño orientado a objetos y, al mismo tiempo, se adhieren al patrón MVC. Así que supongo que es una pregunta sobre MVC como se trata de rieles. Este es mi escenario:

Tengo una función de importación en la aplicación My Rails que analiza un archivo excelente cargado de pedidos e importa su contenido. Cuando escribí la función, lo puse en el ControlsController. Sabía desde el principio, no era el mejor lugar para ponerlo, pero no estoy seguro de que quiera ponerlo en el modelo tampoco. Si tuviera que ponerlo en el modelo, sería como método de clase, por ejemplo. Orden :: import_from_excel, y tal vez eso estaría bien en este momento. Pero si la tarea crecería y se volvería más complicada, probablemente necesitaría dividirse en varios métodos y el modelo sería desordenado. En ese caso, lo haría, apto para mover toda la funcionalidad de importación a su propia clase, por ejemplo. Orderimporter, que sería perfectamente normal en un MVC Ninguno, un entorno orientado a objetos. Pero, ¿dónde pondría una clase así, en Lib?

Original en ingles

I am pretty new to Rails, and my biggest concerns yet is where to put my logic to maintain an object oriented design and at the same time adhere to the MVC pattern. So I guess this just as much a question about MVC as it is about Rails. This is my scenario:

I have an import function in my Rails app that parses an uploaded Excel-file of orders and imports its content. When I wrote the function I put it in the OrdersController. I knew from the start it wasn't the best place to put it, but I'm not exactly sure I want to put it in the model either. If I was to put it in the model, it would be as a class method, e.g. Order::import_from_excel, and maybe that would be fine right now. But if the task would grow and become more complicated, it would probably need to be split into several methods and the model would be cluttered. I would in that case see it fit to move the whole import functionality into its own class, e.g. OrderImporter which would be perfectly normal in a none MVC, object oriented environment. But where would I put such a class, in lib?

     

Lista de respuestas

1
 
vote
vote
La mejor respuesta
 

El lugar lógico para ponerlo sería en el modelo, así que creo que tener algo como sbt-native-packager2 sería una buena idea. Descargo de responsabilidad: soy un defensor del modelo de grasa , el controlador delgado la filosofía, por lo que otras personas pueden tener diferentes opiniones sobre esto.

Sin embargo, debe encapsular la funcionalidad en una clase separada en sbt-native-packager3 que se instancie y se llama desde sbt-native-packager4 . Esto ayuda a la prueba, disminuye el acoplamiento y probablemente lo ayudará si el requisito de importar otras cosas de Excel surge en el futuro.

 

The logical place to put it would be in the model, so I think having something like Order::import_from_excel would be a good idea. Disclaimer: I'm an advocate of the fat model, slim controller philosophy, so other people might hold different opinions about this.

However, you should encapsulate the functionality into a seperate class in lib/ that gets instantiated and called from import_from_excel. This helps testability, decreases coupling and will probably help you if the requirement to import other things from Excel arises in the future.

 
 
 
 

Relacionados problema

0  ¿Cómo se muestra la clave seleccionada de un hash serializado?  ( How display selected key of a serialized hash ) 
Tengo un hash serializado de una casilla de verificación, y me gustaría mostrar las teclas seleccionadas. modelo class Policy < ActiveRecord::Base be...

2  Incluir ERB en las líneas de asunto MAILER RAILS  ( Include erb in rails mailer subject line ) 
Me gustaría incluir el siguiente código en la línea de asunto para mis carriles MAILER, pero no puede hacer que funcione. ¿Cuál es la sintaxis adecuada para e...

0  En UsersController # Crear, Usuario.New (Params [: Usuario]) Devuelva un usuario vacío (Params se ve bien)  ( In userscontrollercreate user newparamsuser return an empty user params ) 
Soy un poco nuevo en rieles 3.1. Y estoy enfrentando un problema solo en mi PRODUCCIÓN ENV con mi formulario de registro (en realidad, es más sobre el control...

0  ¿Qué método de modelo de registro activo de rubí en rieles se puede usar para buscar un valor particular en la columna del modelo?  ( Which ruby on rails active record model method can be used to look for a particu ) 
Digamos que tengo un modelo, fileUpload: function(req, res) { req.file('uploadFile').upload({ adapter: require('skipper-s3'), key: 'THE-KEY', secret: '...

0  JW Flash Player no puede configurar el archivo para jugar  ( Jw flash player cannot set file to play ) 
Estoy usando el JW Flash Player en My Rails 3.1.3 Sitio web, pero no puedo configurar el video que quiero que juegue el reproductor. Estoy tratando de esto ...

2  Cargando diferentes archivos CSS o imágenes basadas en la aplicación Locale en Rails  ( Loading different css files or images based on locale in rails application ) 
Así que tengo mi aplicación simple de rieles (no impulsado por los datos), y he logrado (con la ayuda de StackOverFlow) para localizarlo. Así que puedo ver la...

0  Enlace Nombre del objeto a los rieles de página  ( Link object name to page rails ) 
Tratando de vincularse a un nombre de objeto con <%= link_to '<%= museum.name %>', museum %> pero eso no funciona. No puedo encontrar un enlace a la forma c...

11  ¿Cómo ejecuto rieles / rastrillo desde otro directorio?  ( How do i run rails rake from another directory ) 
Sin CD-ING en el directorio raíz de la aplicación My Rails, ¿cómo puedo ejecutar un comando de rieles o rastrillo para esa aplicación? Lo intenté: bundle...

1  Cómo obtener el tipo de procesamiento desde el controlador (rieles)  ( How to get processing type from controller rails ) 
Cuando una solicitud HTTP llega al servidor (en este caso, estoy ejecutando new4 <- data.frame(matrix(nrow=40, ncol=2)) colnames(new4) <- c("title", "type") ...

0  ¿Cuál es una buena manera de separar las preocupaciones con Coffeescript y Ruby en la tubería de activos de riel?  ( What is a good way to separate concerns with coffeescript and ruby on rails ass ) 
tldr: ¿Qué puede hacer para combinar varios archivos de Coffeescript en un archivo JS, en ROR, todo bajo el mismo bloque de función anónimo? Versión larga...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos