問題タブ [builder-pattern]

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.

0 投票する
1 に答える
979 参照

java - 検証チェックのビルダー パターンを改善しますか?

最近、自分のプロジェクトの 1 つで Builder パターンの使用を開始し、Builder クラスに何らかの検証を追加しようとしています。コンパイル時にこれを行うことはできないと想定しているため、実行時にこの検証を行っています。しかし、私は間違っているかもしれません。それが、コンパイル時にこれを実行できるかどうかを確認しようとしていることです。

問題文:

上記のビルダー パターンでは、必須のパラメーターは 1 つだけで、残りはオプションですが、またはを設定clientIdする必要があります。これら 3 つのいずれも設定されていない場合、上記のコードに示すようなエラー メッセージが表示されます。そのチェックは実行時に行っています。可能であればコンパイル時にこのチェックを行い、すべてが提供されない限りパターンをビルドしないでください。useridflowiddeviceidIllegalStateException

毎回これら 3 つの ID をすべて渡すことは必須ではありません。3 つすべて、場合によっては 2 つ、場合によっては 1 つだけを渡すことができますが、条件はいずれか 1 つを設定する必要があります。

実行時にこれを行うのではなく、コンパイル時にのみ ID 検証を行うことができるように、ビルダー パターンを改善するにはどうすればよいですか?

同じことを正確に説明しているこのSOリンクを見つけましたが、シナリオでどのように使用できるかわかりませんか? また、ひねりを加えたこのビルダーパターンとこのSOの質問

ビルダーパターンでこれをどのように修正できますか?

0 投票する
2 に答える
7123 参照

java - すべてのパラメータを必須としてビルダーパターンを使用するには?

ほとんどの場合、すべてのパラメーターが必須になるビルダー パターンがあるため、以下のコードに示すように長いコンストラクターを作成しました。

すべてのパラメータが必須である場合、私は混乱していますが、どのように役立つのでしょうか? 上記の Builder パターンを表現するより良い方法はありますか? ビルダーコンストラクターに渡されるパラメーターの数を減らすために、独自のクラスに渡されるパラメーターを論理的にグループ化する可能性がありますか?

別々のオブジェクトを持つことで物事がかなり単純化されますが、コードに慣れていない場合は、物事を理解するのが少し難しくなります。私ができることの 1 つは、すべてのパラメーターを独自のaddParam(param)メソッドに移動し、実行時にメソッド内の必須パラメーターの検証をbuild()実行することですか?

ここで従うべきベストプラクティスは何ですか?ここで使用できるより良いアプローチはありますか?

0 投票する
1 に答える
1466 参照

java - ビルダー オブジェクトを別のオブジェクトにコピーし、その中のいくつかのフィールドを変更するにはどうすればよいですか?

以下に示すようなビルダークラスがあります。

私はビルダークラスを次のように作成しています:

ここで、オブジェクトのコピーを作成し、keysそれを新しいRequestKeyオブジェクト say itに割り当て、変数内のユーザー IDのみを他のユーザー ID sayにkeysCopy変更したいと考えています。これどうやってするの?keysCopy12345L

私の他のクラスでは、このkeysオブジェクトにアクセスできるので、それをコピーしてkeysCopyオブジェクトを作成し、ユーザー ID を変更してそのオブジェクトに含める必要があります。このセッターを呼び出し12345Lて設定する必要がある場合もあります。FlowIdsetFlowId

0 投票する
1 に答える
204 参照

javascript - Builder パターンは未定義のオプションをどのように処理する必要がありますか?

JavaScript でビルダーを構築していますが、ビルダーがオプションの未定義の値を通常どのように処理するのかわかりません。フィールドが未定義の場合、ビルダーはオプションのフィールドをオブジェクトに追加しないと思います。それはビルダーに受け入れられますか?そうでない場合、代替手段は何ですか?

ビルダーが未定義のオプションを追加しない最初の実装のサンプルを次に示します。

ビルダー:

実際に:

前もって感謝します!

0 投票する
2 に答える
5436 参照

java - メソッドのjavadocで変数の値を表示する方法は?

以下に示すような静的クラスを持つ Builder パターンがあります。

addCountここで、メソッドに Javadoc を追加してmaxCount、実際の数値をハードコーディングせずに値を表示できるようにします。を使用してみ{@value Builder#maxCount}ましたが、そのメソッドで Javadoc を検索すると値 3 が表示されませんか? 私はここで何をしているのですか?

0 投票する
2 に答える
80 参照

java - 一部の値のみが異なるプロトタイプを作成するための設計パターンはありますか?

クラス階層
クライアントは、基本クラス (Java コード) を介してそれらを使用します。

createNewConcreteFeatureマップから requiredFeature 値のみを取得し、インスタンスを返します。これは、派生クラスで静的になるメソッドのように見えますが、クライアントは既存のオブジェクトで派生クラスのインスタンスを作成できません。これを書くよりエレガントな方法はありますか?または、これには適用可能なパターンがありますか?

0 投票する
2 に答える
924 参照

scala - ファントム型を使用した Scala Builder パターン

Scala で以下のビルダー パターンを使用します。簡単にするために、 orのみを含み、 orへの接続を持たないAそのような3 つのインスタンスを使用しています。問題は、私が使用しなければならないコードのどこでも、呼び出しが潜在的に安全ではないことです。たとえば、で失敗します。それを守るために、ケースとオプションを一致させ、None ケースを処理する必要があります。instance1field1field2field3val s = A.instance1.field1.get; doSomething(s)getA.instance1.field2.getNone.get

別の解決策は、ファントム型とも呼ばれるパラメーター化された型を使用することです。そのテーマに関する優れたチュートリアルはほとんど見つかりませんでした。また、Scala でファントム型と実際のデータ (または状態) を使用してタイプ セーフなビルダー パターンを実装する方法を見つけることができませんでした。すべての例はメソッドのみを説明しています。

私の例でファントム型を使用して、実行時None例外を回避し、適切な型不一致例外のみを取得するにはどうすればよいですか? 言及されているすべてのクラスとメソッドをパラメーター化し、封印された特性を使用しようとしていますが、これまでのところ成功していません。

0 投票する
3 に答える
229 参照

java - Javaはコンストラクターの数を減らします

コンストラクターを持つクラスがあり、それぞれに 2 つのパラメーターがあるとします。たとえば、5 つの型があり、そのうちの 2 つを最初のパラメーターとして、3 つを 2 番目のパラメーターとして渡すことができます。

タイプが A、B、C、D、E であるとします。基本的に私はこのようなものを持っています:

ご覧のとおり、これらの型のすべての可能な組み合わせがあり、標準のビルダー パターンのようにオプションのパラメーターはありません。

コンストラクターの数を減らすにはどうすればよいですか? 私を助けるパターンはありますか?

編集

A を指定した場合は B を指定できず、C を指定した場合は D または E を指定できないため、標準ビルダーは使用できません。