Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

서비스 오브젝트 활용하기 #331

Open
shaynekang opened this issue Oct 18, 2014 · 0 comments
Open

서비스 오브젝트 활용하기 #331

shaynekang opened this issue Oct 18, 2014 · 0 comments

Comments

@shaynekang
Copy link

서비스 오브젝트라는 개념이 있습니다. 제가 자주 링크하는 7 Patterns to Refactor Fat ActiveRecord Models에도 나와있는데요, 여러개의 모델을 동시에 고쳐야 하는 복잡한 로직이 있을 경우, 서비스 오브젝트를 활용하면 코드가 간결해집니다.

특히나 모델 내부에 존재하는 코드 중, 두 개 이상의 모델을 건드리는 코드는 서비스 오브젝트로 빼는 걸 추천합니다. 가령

class Notice < ActiveRecord::Base
  before_save :change_candidates_status, if: :to_notice?

private
  def change_candidates_status
    candidates_count = to - go_responses.count
    candidates = wait_responses.order(created_at: :asc).limit(candidates_count)
    candidates.update_all(status: "go")
  end
end

다음의 코드는 Notice 모델 외에도 Response 모델을 건드리게 되는데, 이러한 코드는 Notice 모델에 있는 것 보다 서비스 오브젝트로 빼는 게 더 좋습니다.
다른 코드에도 비슷한 경우가 있다면 수정하면 좋겠습니다. ㅎㅎ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant