私はJavaで大きなコンストラクターを分割する方法についてthis questionを読んでいます。しかし私は私の場合に何をすべきかは十分にはわかりません。この質問は、ビルダーパターンがより良い方法であることを示唆しているが、同時にいくつかのサブ文中のある人物は「いくつかのパラメータがオプションである場合のみ」と述べている。すべてのパラメータが必須であるため、ビルダーパターンの利点はありません。私は、重要な情報の平和を忘れることを忘れてしまうでしょう。したがって、論理的にグループ化された新しいオブジェクトを作成する唯一の選択肢ですか、ビルダーパターンに重要な事実がありませんか?ビルダーは物事が欠落している場合のみ良いと思われる?Java:ビルダーパターンと論理的にグループ化されたオブジェクト
答えて
"論理的にグループ化された新しいオブジェクトを作成するのは私の唯一の選択ですか、それともビルダーパターンに重要な事実がありませんか?"
私の意見は:
はいです。この場合、Builderを使用すると、抽象化で必要とされる作業の量に比べて追加の利点はありません。
コメントにも記載されています。オブジェクトのパラメータが多すぎると、オブジェクトが多すぎる可能性があります。
+1 "多分オブジェクトはあまりにもやっている"。 – toto2
は、すべてのパラメータが必須であっても、Builderパターンは、まだいくつかの利点があります。
それより読みやすいです。あなたのコンストラクタが10個のパラメータを持っている場合、どちらが何であるかを覚えておくのは難しいです。特に が0またはnullです。
ビルダーはいくつかの異なる方法に渡すことができ、必要なデータを蓄積することができます。 これは、そのデータの一部があるクラスに存在し、別のクラスに存在する場合に便利です。
リストまたはその他のコレクションで、コンストラクタに渡される前に をアセンブルする必要がある場合は、 ビルダーが内部的に世話をすることができます。彼らはまた、 防御的なコピーの必要性のいくつかを除去することができます。なぜなら、建築家は がそれらのオブジェクトを漏らないことを知っているからです。
ビルダーはあなたにシリアライズされたフォームまたはお オブジェクトのJAXBのXML形式をより細かく制御 を与えて、シリアル化のプロキシとして機能することができます。
私のアプローチは、常にそのコンストラクタを呼び出すと、あなたのコード内で混乱の多くを引き起こし、ビルダーによって追加の余分な透明性が十分にあるされている場合にのみ、プレーンコンストラクタで始まり、そしてビルダーを導入するだろう、と述べた
まったく新しいクラスを追加することを正当化する。
コンストラクタへの多くのパラメータは、クラスが扱っている懸念が多すぎることの兆候かもしれません。ビルダーは、カスケードされたケースがあるときにのみ意味をなさない。男の子は無礼な言語セクションを追加し、女の子は買い物リストを追加する。
懸念を分割することは、継承、一般的なパラメータ化クラス、委任クラス、および重い論理グループ化オブジェクトに依存します。
テストケースを作成できるかどうかを検討してください。テスト駆動開発はここで役立ちます。パラメータクラスをモックする必要がある場合、「依存性注入」にはより抽象的なパラメータクラスが必要です。
- 1. グループ理論とPython
- 2. 論理的にソートされたトーナメントフィギュア
- 3. 論理的にMicrosoft Accessのレポートヘッダーをグループ化します
- 4. Javaカスタマイズされたグループ化と||条件
- 5. MySQLとPHP - リンクされたエンティティの論理条件グループ
- 6. Javaオブジェクトマッピングフレームワークとビルダーパターン
- 7. 中央値計算理論を含むグループ化された列を含む
- 8. Java論理XOR( "^")と論理NOT( "!")
- 9. グリッドが必要です日付に基づく論理グループにグループ化されました
- 10. Java 8ネストされたグループ化
- 11. Oracle:ORA-XXXXXコードのシンボル名と論理グループ化?
- 12. 論理的に関連する手順をグループ化する戦略
- 13. ビルダーパターン、テンプレート、ネストされたクラス
- 14. Javaストリーム - キーがリストに表示されたときのグループ化
- 15. 入れ子オブジェクトのビルダーパターン
- 16. テスト自動化の理論的フレームワーク
- 17. 排他的論理和のJavaコード
- 18. MySQL:クラスタ化された場所(論理インデックス)
- 19. Javaでひねりを加えたビルダーパターンをサブクラス化する
- 20. グループ化されたハイチャートのグループ化されたグラフ - グループ化された看護援護者のプラグイン
- 21. Javaでバージョン管理されたシリアル化
- 22. Java 2レベルのパラメータ化された型の推論
- 23. カテゴリとサブカテゴリを論理的に選択
- 24. グループ化されたテーブルビューとUisegmentedコントロール
- 25. グループ化されたUITableViewとレルム通知
- 26. clipsToBoundsとmasksToBoundsグループ化されたUITableViewCell
- 27. MySQLクエリでグループ化されたグループ
- 28. マルチスレッド理論的シナリオ
- 29. パンダ:グループ化されたデータフレーム
- 30. グループ化されたUITableView
私はあなたがすでにそれを持っていると思う... – Steven