2009-02-03 3 views
4

У меня есть приложение для рельсов, которое движется довольно хорошо, но тот факт, что я сам это делаю, означает, что какой-то бедный дерн в конце концов увидит это и скажет: «Что, черт возьми, вы думаете? Почему вы положили это здесь? ?!?!»Rails: Лучшая практика для местоположений класса модели?

Где эта бедная, жаль, что душа ожидает увидеть серию классов, которые не используются ничем, кроме одного класса модели? Очевидно, я мог бы вытащить его в the_model.rb вместе с классом TheModel, но это может расширяться за пределы запланированных двух классов ...

Я думал о lib, но не нужно загромождать всеобщее представление о мире. ...

спасибо.

Мой предшественник благодарит вас.

+0

Не хотите сказать, что ваш преемник благодарит меня? –

ответ

4

Оставьте их в the_model.rb, пока они вам не нужны в более чем одном месте. Если вы отказываетесь от рефакторинга, вы не делаете простейшей вещи, которая могла бы работать. You aren't gonna need it.

В этот момент общий шаблон должен создать каталог для «проблем». См. this weblog post by Jamis Buck или this one by Peter Marklund для получения дополнительной информации.

0

В целом: следуйте соглашениям об именах Rails при переводе имен классов в местоположения файловой системы. (то есть: сохранить класс FooHelper::Bar в foo_helper/bar.rb)

Вы можете делать исключения для небольших вспомогательных классов, которые используются только один раз и хранить их в том же файле, что и ваша модель, но это должны быть исключения. (но верно и обратное, не создавайте однострочные тысячи однострочных файлов)

Используйте модули и пространства имен классов в ваших интересах. Если у вас есть вспомогательный класс, который используется только (и в зависимости от) вашей модели, поместите их в пространство имен класса модели:

class TheModel::HelperClass 
end 

расположение в файловой системе будет app/models/the_model/helper_class.rb

И то, что не зависит от модели, вероятно, может все еще быть в пространстве имен

module Bar 
    class Foo 
    end 
end 

живет в bar/foo.rb, конечно

Вы должны, вероятно, не бойтесь положить вещи, которые не являются модели в lib - это то, что этот каталог для

Я бы сказал concerns, в то время как полезно, не действительно правильный путь, потому что это способ разделить один класс на несколько файлов, и, похоже, вы этого не делаете.

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