Где я должен разместить свой пользовательский код, если он не подходит к модели или контроллеру? - PullRequest
0 голосов
/ 14 февраля 2012

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

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

1 Ответ

1 голос
/ 14 февраля 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...