Несколько приложений в Ruby Padrino: как назвать модели? - PullRequest
1 голос
/ 12 сентября 2011

У меня есть проект Padrino, который состоит из нескольких приложений. Например:

  • Веб-сайт ( Модели: Сайт, Страница )
  • Блог ( Модели: пост, комментарий )
  • Магазин ( Модели: Категория, Товар, Заказ )
  • Отслеживание ( Модели: посетитель, контент )

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

  • Веб-сайт ( Модели: Site, SitePage )
  • Блог ( Модели: BlogPost, BlogComment )
  • Shop ( Модели: ShopCategory, ShopProduct, ShopOrder )
  • Отслеживание ( Модели: TrackingVisitor, TrackingContent )

Но это выглядит очень странно и вызывает много лишней печати. ​​

Что ты думаешь? Является ли хорошим стилем игнорирование пространства имен и надежда не сталкиваться с конфликтом имен (например, модель «Категория» для приложения «Блог» => Ошибка), или мне следует добавлять имя приложения к каждой модели?

Заранее спасибо.

Cheers Marc

Ответы [ 2 ]

1 голос
/ 12 сентября 2011

Я использую модуль в качестве пространства имен, т.е.:

module BlogModels
  class Category
  end
end

и довольно хорошо работает, например, с dm, потому что у меня есть пространство имен table_name, кстати ... BlogCategory мне тоже подойдет.

0 голосов
/ 12 сентября 2011

Я нашел разумный способ для пространства имен моделей в Mongoid и уменьшить накладные расходы.

Я называю модели так: BlogPost, BlogComment, BlogCategory

А в модели я использую class_name и inverse_of:

class BlogPost

  include Mongoid::Document

  # ... lots of stuff ommitted

  has_many :comments, class_name: 'BlogComment', inverse_of: :post
end

class BlogComment

  include Mongoid::Document

  # ... lots of stuff ommitted

  belongs_to :post, class_name: 'BlogPost', inverse_of: :comments
end

И доступ через:

post = BlogPost.first
post.comments.first # get comments

BlogComment.first.post # get related post

Это делает цепочку доступа короткой и лучше, чем:

post = BlogPost.first
post.blog_comments.first # get comments

BlogComment.first.blog_post # get related post

Подробнее: http://mongoid.org/docs/relations.html

...