2016-10-18 3 views
0

У меня есть класс фасада, который выполняет SQL-запросы на других моделях. Я хотел использовать области, но у меня возникают сомнения относительно того, где их реализовать, и если они лучше, чем просто простые методы. Я также обеспокоен хорошей практикой программирования.Правильное размещение области

Во-первых, это мои модели

class User < ActiveRecord::Base 
    has_many :projects 

class Project < ActiveRecord::Base 
    belongs_to :User 
    has_many :tasks, :inverse_of => :project 

class Task < ActiveRecord::Base 
    belongs_to :project, :inverse_of => :tasks 
    has_many :instances 

class Instance < ActiveRecord::Base 
    belongs_to :task 

Фасад Класс:

def Function1(param) 
    @var = @user.instances.where("...", param).order(:start_time).group_by { |x| x.method} 
end   
def Function2 
    @var = @user.instances.where("...").first 
end 
def Function3 
    @var = @user.projects.distinct 
end 

1) Если работать 1 и 2 быть на модели пользователя, или в случаях?

2) Должен ли функционал быть на модели пользователя или в проектах??

3) Могу ли я, например, написать «отличную» область для проектов и сферу «Пользовательские проекты», которая вызывает проекты?

ответ

1

1) Должны ли функционировать 1 и 2 в модели пользователя или в экземплярах?

В случаях - вы ограничивающие объем экземпляров, которые возвращаются

2) Если function3 быть на модели пользователя или в проектах?

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

3) Могу ли я, например, написать «отличную» область для проектов и область «Пользовательские проекты», которая звонит в проекты "?

Да, вы можете сделать то и другое, если вы действительно этого хотите - на практике это, вероятно, не стоит делать пользовательскую область distinct_projects, если только вы не сможете повторно использовать область distinct_projects снова в другом месте (например, в другой области). Это не спасет вас при вводе;)

+0

Спасибо, я удалил «.first» из области, сгенерированной функцией2 – Gaston

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