問題タブ [mixins]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
structuremap - 追加機能のメソッド呼び出しをインターセプトする最も簡単な方法は何ですか?
のリストを返すリポジトリがあるとしますPost
。リポジトリ インターフェイスには、GetAll()
それが示唆することを行うメソッドがあります。
ドメインロジックをリポジトリに入れるべきではないという理論に沿ってGetAll()
、次のロジックをGetAll()
結果に追加できるように、具体的なメソッドへの呼び出しをインターセプトしたいと考えています。
これを傍受したい理由は、(1)クライアントに拡張メソッド(OrderByDescending
またはその役に立たないラッパー)を呼び出すことを覚えてもらいたくない、毎回呼び出す必要がある、および(2)そうしないためですすべての具体的な実装で、GetAll()
結果を順序付けすることを忘れないようにしたい - このロジックを任意のリポジトリの外部の単一の場所に配置したい。
これを行う最も簡単な方法は何ですか?
私はすでにStructureMapを使用しているので、これで傍受できれば、低コストのオプションになる可能性があります。しかし、SM がメソッド呼び出しをインターセプトするとは思いません。オブジェクト インスタンスの作成だけですか?
プロキシまたは mixinパターンに移動する必要がありますか? Castle Dynamic Proxyにオールインする必要がありますか? または、考慮すべき別の方法、またはおそらく組み合わせがありますか?
上記の特定の例に対する具体的な提案に本当に興味があります。私はAOPの初心者なので、優しくしてください。
python - PythonでMixInsを使用するときのダイヤモンドの問題
単純なものを実装する次のコードを検討してくださいMixIn
。
実行main
すると、次のエラーが発生します。
問題は、との両方Story
がStoryHTMLMixin
から派生しobject
、菱形継承問題が発生することです。
解決策は、単に古いスタイルのクラスStoryHTMLMixin
を作成することです。つまり、から継承を削除して、クラスの定義を次のように変更します。object
StoryHTMLMixin
実行すると、次の結果になりますmain
。
古いスタイルのクラスを使用するのは好きではないので、私の質問は次のとおりです。
これはPythonでこの問題を処理する正しい方法ですか、それともより良い方法がありますか?
編集:
最新のPythonソースのクラスUserDict
は、(私の例で示されているように)古いスタイルのクラスに頼るMixInを定義していることがわかります。
すべての人が推奨しているように、MixInを使用せずに、実現したい機能(つまり、実行時のメソッドのバインド)を再定義することに頼ることができます。ただし、要点はまだ残っています。これは、再実装に頼ったり、古いスタイルのクラスにフォールバックしたりせずにMROをいじることができない唯一のユースケースですか?
java - Spring Roo for Java など、コンパイル時/実行時の「ミックスイン」機能を備えたその他のフレームワーク
Spring Roo の「ミックスイン」と同様に、Java クラスにメソッドを自動的に注入するフレームワークがあるのだろうかと思っています。
たとえば、Spring roo では、次のようにクラスを defile します。
Roo フレームワークは、コンパイル時に必要なすべてのメソッドを次のように生成します。
私は Spring Roo を使用したくありませんが、これだけを処理する他のフレームワークが必要です。
前もって感謝します。
アビシェーク
spring - SpringAOPの紹介でミックスインを作成する
誰かがspring-aopの紹介(mixin)を使用して2つのJavaインターフェイスをつなぎ合わせるサンプルコードスニペットを提供できますか?
AspectJアノテーションスタイルの設定を探しています。また、私が持っている特定のユースケースは、それぞれが独自のインターフェースを実装しているいくつかのJavaBeanをつなぎ合わせることです。したがって、デリゲートをコーディングするのではなく、Spring XMLを使用して逃げることができれば、それは素晴らしいことです。
ruby - rubyist は mixin のアクセサを参照しますか?
mixin メソッド内から拡張オブジェクトのアクセサを参照することは悪い習慣と見なされますか? 簡単な例:
この場合、実際にはマウスピースの要件を WindInstrument モジュールに直接移動するだけですが、アクセサーが拡張オブジェクトに存在することが実際に理にかなっている、より複雑なシナリオではどうでしょうか? これは単に懸念の不適切な分離の問題ですか?
ミックスインは、拡張オブジェクトの状態を知る必要のないカプセル化された動作を追加するのに便利です。実際、私の直感では、ミックスインはどのような状態についても認識すべきではないと教えてくれます。状態の知識が必要な場合は、通常、次の 2 つの選択肢のいずれかにフォールバックします。
状態をクラスに入れ、継承階層ではなく、構成を介して追加します。これに関する私の問題は、そこにいるルビストが状態にアクセスするミックスインを作成していることを知っていることです。これにより、(私にとって)直感的ではないにしても、読みやすくなります。
マウスピースをパラメーターとしてモジュールに渡します。これだとデザインがごちゃごちゃしているような気もするし、ルビーの世界観としては忌まわしいとさえ感じます。
このコードは他の人を悩ませますか? Ruby を使っている賢い人がたくさんいることは知っているので、問題は私にあると思います。私は何が欠けていますか?私はただリラックスする必要がありますか?あなたならどうしますか?
css - Sassミックスインに渡されるパラメーターの配列を取得する手段はありますか?
さまざまな新しいCSS3プロパティは、無限の値のセット、つまりbox-shadow
背景のグラデーションを受け入れます。
例box-shadow
として、理想的には次のことができるはずです。
好きなだけパラメータ。問題は、Sassが決定的な数のパラメーターを要求することであり、そうでない場合でも、それらをループする手段がないことを私は知っています。
私がこれまでに考えることができる最高のミックスインは次のようになります:
私はSassベンダーケータリングCSS3ミックスインのセットを書き込もうとしています。(https://github.com/stevelacey/sass-css3-mixinsで入手できます)。
明らかに、これはゴミで、長く、5つのスタイルに制限されていますが、より良い方法はありますか?
編集:
@Riklomasは私にこれを指摘しました:https ://gist.github.com/601806これは少なくとも私のコードよりも反復性が少なく、適切な解決策を探しています。
ruby - 別のモジュールに属するクラスにシングルトンモジュールを含める場合のrubyNameError
モジュールにそれ自体が存在するクラスにシングルトンモジュールを含めようとすると、機能しません。次に例を示します。
私が得るエラーは次のとおりです。
初期化されていない定数Object::SomeClass(NameError)
シングルトンモジュールに検索しSomeModule::SomeClass
ないように指示する方法がわかりませんObject::SomeClass
groovy - Groovy::@Mixinメソッドはターゲットクラスのメソッドをオーバーライドします
これはある種の逆継承のように見えます。
ミックスインは、新しいメソッドを定義する手段としてのみ使用されますか?
もちろん、従来の継承を使用して拡張を使用することもできますが、このユースケースでは、各ドメインに固有のフォーム実装があり、アプリケーションコントローラーでフォームリクエストをキャッチしてMyUniqueDomainForm.mixinDefaultFormMethodsを実行するフォームビルダーが必要です。 (したがって、必要な場合にのみデフォルトのメソッドを定義する必要があり、各フォームクラスにmy.package.app.DefaultFormMethodsをインポートする必要はありません)
ruby-on-rails - RubyまたはRailsで、「インクルード」がクラス内にある場合とクラス外にある場合があるのはなぜですか?
と思った
「ミックスイン」を追加することです。これにより、FooモジュールのすべてのメソッドがApplicationControllerのメソッドとして扱われます。
しかし今、私は次のようなコードを見ています
それで、なぜそれは外にあるのApplicationController
ですか?それを中に入れるというより一般的な使用法とはどう違うのApplicationController
ですか?
ruby-on-rails - Rails: モジュールからのコールバック
私はこれをしようとします:
アプリ/モデル/my_model.rb:
lib/my_module.rb:
しかし、私はエラーが発生します:
どうすれば修正できますか。
また、私はルビーが初めてです。before_destroy、validates、has_many の「属性」はどのタイプですか? それらは変数ですか、メソッドですか、それとも何ですか? ありがとう