問題タブ [parameter-object]
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.
c# - パラメータ オブジェクトの通常のクラスまたは内部クラスを作成しますか?
メソッドに多くの引数を渡す代わりに、引数オブジェクトにカプセル化していました。
注:デモ用に簡略化
このような場合、より良いプラクティスは何でしょうか?
• クラスを作成し、?という名前を付けます。 -- または -- • 入れ子になったクラスを作成し、?という名前を付けます。
InventorySaveArgs
SaveArgs
また、どちらか一方を選択する理由についても説明していただけますか?
[編集] : その引数の型は、別のアセンブリでも使用されます。
副次的な質問: 複数のパラメーターを単一のオブジェクトにカプセル化するためのパターン名が偶然に存在するかどうか、ちょっと興味があります。
[UPDATE] : MSDNでネストされた型の使用に関するガイドラインが見つかりました
InventorySaveArgs
。別のアセンブリから入手できるはずなので、通常のクラスを使用します。
java - リファクタリングのヘルプ: パラメータ オブジェクトを導入しますか?
特定の一連の割り当てがわずかに異なる順序で発生することを除いて、同じコードがいくつかあります。
int[]
これを、順序を表すtype のメソッド パラメーターに分解するのは簡単です。
しかし、私はそれが最も明確ではないことがわかりました。
別のオプションは、それらを type のオブジェクトに分解することでしたAssignmentOrders
。また、配列ではできなかったオブジェクト コンストラクターの値の検証も行うことができます。これは、本Refactoringの「Introduce Parameter Objects」リファクタリングになります。
この特定のリファクタリングがやり過ぎなのかどうか疑問に思っていint[]
ます。
コード:
オリジナルの 3 つのサンプル:
上記の3つをこれにリファクタリングした方法:
理論的には、パラメーター オブジェクトにリファクタリングする方法:
私が考えていたのは、使用する代わりに特定のクラスを作成することでしたint[]
...しかし、それはやり過ぎになるのではないかと思いました。
利点は、読みやすくなるということです。の代わりにorderOfSections[0]
...orderOfSections.value1SectionIdx
クラスに検証コードを入れることもできます。
これが、Martin Fowler がパラメーター オブジェクトの導入と呼んでいるものだと思います。
編集:
別のオプションは、辞書を使用することです。新しいクラスよりも軽量ですが、より説明的です...次に、次のようなものを使用できますorderOfSections["value1"]
python - Pythonで「パラメータオブジェクト」リファクタリングを実装するにはどうすればよいですか?
今、私はパラメータオブジェクトのクラスを次のように継承するために使用しています
これにより、クラスコード自体ではなく、コードを使用するという不条理が解消されます。だから、私はC ++のことをして、パラメータオブジェクトを初期化リストに渡すようにしたいと思います
Pythonでこれを行うことはできますか?具体的には、親クラスを子のクラス内にあると呼び出すことで、親クラスの属性を設定でき__init__
ますか?--「DiveintoPython」を読んでいると、オブジェクトが呼び出されるまでにオブジェクトがすでに構築されているので、これを実行できると思います__init__
。
または、Pythonでパラメーターオブジェクトリファクタリングを実装する別の方法がありますか(そして私はC ++テクニックを強制しようとしています)?
.net - ReSharper を使用して数秒でメソッドパラメーターオブジェクトを作成する方法は?
メソッドのすべてのパラメーターを選択し、ReSharper にそれらのパラメーターから「メソッド パラメーター オブジェクト」としてクラスを作成するように依頼することは可能ですか?
c# - このようなコードを書くためのアンチパターン名はありますか?
Show()
これは、パラメータークラスを使用して、メソッドに可能なパラメーターを含めるコードです。このFooOption
クラスの値はあまり関連していません。以下の実装を見ると、これを確認できShow()
ます。これが悪いコードであることは知っていますが、これを行うことに関連するアンチパターンはありますか?
更新:パラメータオブジェクトがアンチパターンではないことを知っています。私の経験では、パラメータオブジェクトのプロパティは関連しています。これは、私が見つけようとしている可能性のあるアンチパターンです。3つのプロパティすべてを設定しても意味がありません。
javascript - javascript関数のパラメーターオブジェクトの検証
すべての関数に単一のオブジェクトパラメータを使用させて、順序に関係なく名前付き引数のリストを渡すことができるようにします。
例えば:
したがって、何かを渡すことでAオブジェクトを作成できます。オブジェクトに最初または2番目のプロパティがない場合でも、オブジェクトはすべてのプロパティがnullまたはその他のデフォルト値に設定された状態で作成されます。
デフォルトのAオブジェクトを作成したい場合は、パラメーターオブジェクトをまったく使用せずにnew A()を呼び出したいのですが、「undefined」のプロパティに不正にアクセスしようとしているため、コンストラクターが「何でも作る。
私はそれをこのようにすることができます:
ただし、すべての関数に単一のparamオブジェクトを使用させる場合は、すべての関数定義にこの行を含める必要があります。
この結果を達成するためのより良い方法はありますか、またはすべての関数が自動的にこのチェックを取得して、パラメーターが存在するか、少なくとも初期化されていることを確認して、アクセスしようとしたときにコードがフォールオーバーしないように、関数プロトタイプを操作する方法はありますか? 'undefined'のプロパティ。
ありがとう。
c# - メソッドパラメータとパラメータオブジェクト
インターフェースを実装することでコア機能を拡張できるフレームワークを構築しようとしています。以下は、このインターフェースの唖然とした例です。
最近、このインターフェイスを変更することにしました(依存するコードを壊してはいけないことはわかっていますが、実際には、このインターフェイスを実装しているサードパーティがまだないため、「やり直し」の機会があります。このインターフェースを正しく実装するため)。
ソフトウェアを正しく機能させるには、このインターフェイスにさらに2つのパラメータを追加する必要があります。私たちが考えている2つの方法は、次のように署名に追加することです。
または、このようなパラメータオブジェクトを作成します
そして、次のようにメソッドの最後にそれらを追加します。
私は、どちらの方法が「最も」正しい方法であるかについてのある種のガイダンスを探しています。私は両方のカテゴリーで賛否両論を見ることができますが、私の偏見が私を間違った道に導くことを望んでいません。
私の主な関心事のいくつかは次のとおりです。
- ソフトウェアの拡張性-インターフェースを実装することで、ユーザーがまだ考えていないことを実行できるようにしたい
- 保守性-理想的には、GetData()の呼び出しを担当するコードに再度触れる必要はありません。
- クリーンなAPI-サードパーティの開発者を苦しめるために到達したソリューションは必要ありません
この問題のガイダンスを得るためにオンラインでどのような質問をするべきかさえわかりません。答えは「依存する」(p1-p5がGetData()関数の目的にどの程度関連しているかなど)と感じていますが、評価に役立つ質問のリストを誰かに教えてもらえますか?一方のソリューションがもう一方のソリューションよりも優れているかどうか。
java - パラメータオブジェクトクラスで@CookieValueを使用するにはどうすればよいですか?
@CookieValueをパラメータオブジェクトに入れることは可能ですか?私はこれを機能させることができないようです何が欠けていますか?
これがパラメータオブジェクトクラスです。
java - IntelliJ 13 でパラメーター オブジェクトのリファクタリングを導入する
IntelliJ IDEA 13.1 で自動「パラメータ オブジェクトの導入」リファクタリングを実行したいと考えています。このページによると、このリファクタリングはバージョン 10.5 で利用可能だったようですが、現在のバージョンでは見つからないようです。
簡単に言えば、IntelliJ でメソッドの一連のパラメーターをカプセル化するクラスを作成し、そのパラメーターをその型のインスタンスに置き換えてほしいということです。
このリファクタリングは本当に利用できなくなったのでしょうか?