2016-04-30 4 views
1

私は同じ機能をfull_nameuser_view.ex,とconnection_view.ex)の3つのビューに持っています。どのように私はそれがDRYであることをリファクタリングすることができますか?私はfull_name機能をプロジェクトの1か所にまとめたいと思っています。ビュー機能をDRY

答えて

1

テンプレートは単なる関数なので、いくつかのヘルパーモジュールで共通の関数を定義し、それを必要な場所にあるViewにインポートすることができます。

defmodule MyApp.UserHelpers do 
    def full_name(...) 
    # ... 
    end 
end 

defmodule MyApp.UserView do 
    use MyApp.Web, :view 
    import MyApp.UserHelpers 

    # ... 
end 
+0

'import MyApp.UserHelpers'は' web/web.ex'に置くことができるので、インポートを繰り返す必要はありません。 – tkowal

1

周囲にはいくつかの方法があります。一番簡単な方法は、別のモジュールにその関数を置き、必要な場所にインポートするだけですが、それが混乱することが想像されるので、まずアプリケーションを設計して、適切な方法でそれを調べてください。あなたはあなた自身のフォルダと構造要素をあなたのアプリケーションに作成するのを怖がってはいけません。

私は他の回答で述べたように、あなただけので、それはそのようなものになるだろう(名前が適切であるかどうかわからない)デコレータのように、独立した構造要素を作成することができます。

defmodule MyApp.UserDecorator do 

    def full_name(%MyApp.User{first_name: first_name, last_name: last_name} = user) do 
    first_name <> " " <> last_name 
    end 

end 

その後、アプリのどこにでも使用できます。

関連する問題