2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ActiveDecoratorの役割 Helperとの使い分け

2
Last updated at Posted at 2020-09-20

はじめに

Viewの共通化やロジックを切るときに、いつもHelperを使っていたのですが、Decoratorのことをよくわかっておらず、どちらもviewでのメソッドを作成できるものとしての認識しかなかったので、Decoratorの役割について調べてみました。

DecoratorとHelperについて

どちらもViewにロジックを書かないようにして、Viewの肥大化を防ぐ役割を持っています。

Viewで必要になるロジックをHelperで定義するのは、よく使われますが、helperばかり使っていると、どんどん肥大化していってしまいます。

他にも、helperのデメリットとして

  • Viewでグローバルに有効になってしまうので、名前が被ってしまう可能性があり、バグの原因になってしまう
  • モデルの情報を引数として渡した場合、名前が冗長になってしまう

等あげられます。

これらの解決策として、ActiveDecoratorが用いられます。

Helperはmodelに依存しないのですが、ActiveDecoratorではmodelに依存したロジックを書くことが可能です。

これの何がいいかというと、modelにアクセスする際に変数を介する必要がない、
引数を渡す必要がないことがメリットです。

また、viewと対応するmodelごとにdecoratorファイルを作成することが可能です。

Helperの場合

def user_name(model)
 model.first_name + model.last_name
end

Decoratorの場合

def user_name
 first_name + last_name
end

こんな感じでmodelをわざわざ渡す必要がなく、すっきりと書くことができます。

このようにDecoratorを用いることによって、Viewをシンプルに保ちつつ、メソッドが冗長になりにくく、見やすいものを作成することができます。

最後に

使い分け方としては、modelに依存したものであればDecorator、modelに依存関係がないものであればHelperを用いることによって、どちらか一方の肥大化を避けるために適切に定義してやるのがいいのかなと思っています。

参考文献

README
https://github.com/amatsuda/active_decorator/blob/master/README.md#decorating-associated-objects

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?