2012-02-14 3 views
0

Я довольно новичок в Rails, и мои самые большие проблемы - это то, где моя логика должна поддерживать объектно-ориентированный дизайн и в то же время придерживаться шаблона MVC. Поэтому я думаю, что это вопрос о MVC как о Rails. Это мой сценарий:Где я должен поместить свой код, если он не вписывается в модель или контроллер?

У меня есть функция импорта в приложении Rails, которое анализирует загруженный Excel-файл заказов и импортирует его содержимое. Когда я написал функцию, я поместил ее в OrdersController. Я знал, что с самого начала это было не самое лучшее место, но я не совсем уверен, что хочу поместить его в модель. Если бы я был помещен в модель, это было бы как метод класса, например. Закажите :: import_from_excel, и, возможно, сейчас все будет хорошо. Но если задача будет расти и усложняться, ее, вероятно, нужно будет разбить на несколько методов, и модель будет загромождена. В этом случае я бы счел нужным переместить всю функциональность импорта в свой собственный класс, например. OrderImporter, который был бы совершенно нормальным в объектно-ориентированной среде MVC. Но где бы я поставил такой класс, в lib?

ответ

1

Логическое место, чтобы положить его в модель, поэтому я думаю, что что-то вроде Order::import_from_excel было бы хорошей идеей. Отказ от ответственности: я сторонник модели жира , тонкий контроллер, поэтому другие люди могут придерживаться разных мнений об этом.

Однако вы должны инкапсулировать функциональность в отдельный класс в lib/, который получает экземпляр и вызывается из import_from_excel. Это помогает тестировать, уменьшает связь и, вероятно, поможет вам, если в будущем возникнет необходимость импортировать другие вещи из Excel.

+0

Спасибо! Это имеет большой смысл. – Johannes

Смежные вопросы