Какая хорошая практика создания «своих» функций в Rails?
Привет
Я тут мигрирую с java на rails и не понимаю организационный вопрос. Ну вот раньше, в java, если мне нужна была какая-то выделенная логика, то создавался package и там всё хранилось. Под "всё" понимаю бины, какие-то utils, может отдельные классы для работы с другими объектами других классов.
В rails же (возможно только поначалу) сложилось впечатление, что всё жестко завяно на MVC, где ты описываешь какую-то логику либо в модели, либо в контроллере. Но где хранить свои классы и всё то, что обычно лежит в package? Какая в этом случае best practice?
Помимо упомянутых коллегами каталога lib и своего гема можно выделять классы в подкаталоги в app. В отличии от lib все подкаталоги app находятся в автозагрузке по умолчанию, то есть не нужно писать require вручную. Ну и по смыслу - в app размещают то, что относится непосредственно к текущему приложению, а в lib - или код от "сторонних производителей", либо свой более независимый от текущего приложения код с прицелом на выделение и использование его в других проектах.
Да, я согласен, что lib - это скорее для стороннего. Но где правильнее хранить в app? Там просто изначально задана структура assets, controllers, helpers, models, views. Мне также, среди этих папок можно создать свою по аналогии с package? То есть например /apps/projectnameprefix/users/utils/ ?
Еще нужно сказать, что автозагрузка стоит только на первый уровень подкаталогов в app. Если ваша библиотека большая и серьезно структурированная, то возможно вам все же в lib?