Это не просто голые советы, за всем этим стоит личный опыт и море потерянного времени.
Эту статью стоило назвать «Мои ошибки, совершенные при работе с Rails приложениями», но получилось бы как-то слишком длинно.
Толстые модели и голые контроллеры
Моё первое rails-приложение было просто ужасно. Большая часть логики лежала в контроллерах. Я обрабатывал списки тегов и создавал ассоциации в контроллере, я почему-то отказывался от замечательного метода accepts_nested_attributes_for.
Всё было хорошо, но чёрт подери, я не люблю тестировать контроллеры! Гораздо проще и приятнее тестировать модели.
Обработка списка тегов очень простая задача, и почему же лучше выделить код этого обработчика в модель, а не контроллер?
- Удобство. Вы просто открываете модель Post и находите там все методы, которые работают с вашей моделью. У вас нет нужды открывать контроллер и править методы там.
- Дальнейшая расширяемость. Если код обработчика будет висеть в методе контроллера, то практически, этот код будет навсегда привязан к контроллеру. А что если вы захотите обработать список тегов в консоли?
- Предназначение. Контроллеры не предназначены для разбивки списка тегов.
Рисуйте и продумывайте
Да, это действительно помогает! Попробуйте обрисовать все связи вашего сайта. Попробуйте представить сложности, которые могут возникнуть. Конечно, при отсутствии опыта это может показаться очень трудным. Вы можете просто не знать, какие сложности будут ждать вас. Предварительное проектирование будет развивать вас. При обретении достаточного количества опыта, вы сможете заранее устранить многие сложности на этапе проектирования.
Я бы сэкономил уйму времени, если бы заранее нарисовал систему взаимодействия элементов меню со страницами и категориями на моем сайте.
Но я перемудрил и создал одну лишнюю модель. В итоге пришлось переписать всё.
А что дают рисунки?
В дальнейшем, спустя много времени вы сможете освежить свою память, просто взглянув на ваш рисунок. Иногда связи бывают очень сложными и “врубаться” заново в проект очень тяжело.
Графическая информация более проста к понимаю, поэтому она быстро освежит вам память и позволит сэкономить время.
Продумывайте ваш css заранее
Я потерял около двух дней на этом. Это был мой первый проект. Я решил отложить создание css-скелета на будущее. Я совершил роковую ошибку. Пришлось вручную править каждый view-файл.
Это было ужасно, но еще хуже то, что в первый раз я сделал это не правильно и пришлось повторно пройтись по всем файлам.
Избегайте этого, создавайте ваш css-скелет заранее и следуйте ему.
Описывайте сложные модели в комментариях
Это здорово помогло мне. Когда я создавал сложную систему меню с множеством простых и полиморфных связей.
Я решил заранее описать суть этой модели в комментариях.
Когда я создавал модель, всё было понятно, но уже через пару недель я не мог вспомнить всех тонкостей. Комментарии помогли мне.
Думайте о расширяемости
Если вы создаете модель комментариев и привязываете эту модель к постам, подумайте, а что если в будущем вам понадобится добавить комментарии к голосованию, или к статичной странице? Продумайте расширяемость заранее, в будущем это сэкономит вам время.
Вы можете быстро сдать заказ, но что если через месяц что-то сломается или вам придётся добавить новую “фичу”? Гораздо приятнее работать с четкой структурой, нежели морем костылей.

{ 7 comments… read them below or add one }
Для рисования сильно помогает railroad.
http://railroad.rubyforge.org/
@Maxim Filatov, спасибо, скачаю =)
А что вы используете для «рисования»? Бумагу и карандаш, или какие-либо специальные средства проектирования?
Я, например, сначала описываю на бумаге весь функционал, потом рисую таблицы (модели) и затем описываю взаимодействия. После того, как эскиз готов, я его рассматриваю в поисках лишних звеньев и возможности упрощения. Интересно, есть ли программные средства для этих задач.
@Vladimir, ручку и бумагу конечно же. есть же какие-то программы для рисования UML.
В RubyMine есть штука которая сама рисуют диаграмму моделей текущего проекта =)
А я использую для этого ментальные карты. Очень удобно. Например есть бесплатный редактор mindmap′ов XMind — http://www.xmind.net/
Спасибо за ссылку. Думаю ментальные карты полезная вещь во многих делах. Но я почему-то предпочитаю лечь на диван и рисовать в своей тетрадке %)
Вобще есть такой просец называется нормализация баз данны, можна на той же википедии ознакомиться http://ru.wikipedia.org/wiki/Нормальная_форма