エリクサーでクロスカッティングの問題を実行する方法は何ですか?ユーザーが電子メールを購読していないかどうかを確認したいとします。電子メール送信機能が実行される前にそれを行うことは可能でしょうか? Elixirのドキュメントでは、他の関数のインターリーブについては何も見つかりません。before_filterのように、スタンドアローンのElixirアプリケーションと同じです。通知、マーケティング、トランザクションなど、複数のメールが送信される可能性があります。これらの機能のそれぞれに手動でチェックすることはあまりにも不可欠です。エリクサーの方がいいですか?エリクサー - クロスカッティングの関心事
1
A
答えて
0
レールでは、before_filter
を使用すると、実際にはデザインが不良になります。そのようにコード化する方が簡単だと分かっていますが、しばらくするとコードベースが成長し、それらのコールバックにさらにロジックを追加し、それらの制御を緩めるようになります。
単純な関数を使用してコールバックなしで同じことを行うことができ、コントロールを避けて推論することができます。
は、あなたが複数のメール送信機能
defmodule Mailer do
def send_email1(params) do
# do work
end
def send_email2(params) do
end
# ...
end
代わりのあなたは、単に右それらの機能のそれぞれにコードを追加することができますいくつかの並べ替えのbefore_filter
を追加することがありますモジュールがあるとしましょうか?それは、何が起こっているのかを簡単に理解するのが簡単です。
defmodule Mailer do
def send_email1(params) do
if can_send?(params) do
# do work
end
end
# ...
end
ロジックが重複しています。まあ...チェックロジックを新しい関数に移すことができ、少なくともこれらの各関数からif
を削除することができます。しかし、新しい抽象化を作成して共有論理を維持することもできます。
defmodule Mailer do
def send_email(email_name, params) do
if can_send?(params) do
do_send_email(email_name, params)
end
end
defp do_send_email("email1", params) do
# do work
end
# ...
end
これは、コールバックを使用する任意の方法よりも簡単なコードです。あなたはそれを支配します。また、共有ロジックを追加または変更したり、必要に応じて条件ロジックを追加するのは簡単です。
0
エリクシルのmodule attributesを使用して、テールコール最適化関数呼び出しの連鎖を開始するのが好きです。これにより、コールバックをすべて1か所で簡単に宣言できます。
関連する問題
- 1. 検証はクロスカッティングの関心事ですか?
- 2. 初心者AWSコグニートの関心事
- 3. リアクションネイティブJSの関心事
- 4. Noob関心事:T-SQLグループ句エラーError
- 5. Rails 4多態性の関連性と関心事
- 6. LightBulbの仕事 - 初心者
- 7. エリクサー未定義関数
- 8. エリクサー通過関数パラメーター
- 9. Androidの大きな関心事「強制終了」
- 10. Svn外部からNugetへの移行 - 関心事
- 11. エリクサー:
- 12. エリクサー
- 13. エリクサー:is_function
- 14. データ中心のWebアプリケーションデザインブック/記事の推奨事項
- 15. エリクサー/フェニックスファイルアップロードフォルダ
- 16. クロスカッティングのための良い戦略
- 17. クロスカッティングの問題に対処する
- 18. エリクサー生成量
- 19. エリクサー反映
- 20. クロスカッティングの懸念事項を注入するためのさまざまな方法は何ですか?
- 21. エリクサー - scrub_params
- 22. はエリクサー:
- 23. エリクサーで他の
- 24. laravelクエリと同様の関心事を持つユーザーを取得する方法
- 25. UMLクラスの関心事/モジュール/拡張子を表現する方法
- 26. エリクサー/フェニックスの乗算
- 27. エリクサーの並列マップアルゴリズム
- 28. エリクサー/フェニックス処理エラーエラー
- 29. エリクサーはマップ
- 30. エリクサーとドッカー
これは私の意見ではありますが、ユーザを受け入れ、購読しているかどうかをチェックし、そうであれば電子メールを送信するという機能を持つ特別なモジュールを書くことができると思います。それで、あなたが必要としている場所であれば、このモジュールを使うことができます。このように明示的になり、コールバックの魔法をあなたに残すことはありません。 – JustMichael
@JustMichael - 繰り返しはありませんか?私はモジュールも考えていますが、その電子メールモジュールのすべての機能が同じことをする必要があるため、すべての機能で同じことをチェックすることはDRYの原則には従いません。また、私は別の選択肢を見ていますエリクサーは、言語を学ぶことを試みている間に提供します – sat
ドライ原則は法律ではありません - 良いガイドラインです。繰り返しを避けることができないこともあります。コードを繰り返さないことは大きな目標ですが、読みやすく保守可能なコードも重要です。それに、AOPがこれをどのように成し遂げたと思いますか?これを行うためにコードを繰り返さないと思いますか?それはただの視界から隠されているだけです。 –