クラスを設計する際に、コンストラクタをパラメータなしにするために努力すべきですか?パラメータのないコンストラクタはOOPの中で最も良いと考えられています
答えて
ません。必要な数のコンストラクタを持つことができ、デフォルトのコンストラクタは必ずしも必要ではありません。 コンストラクタは、クラスの目的に合っている必要があります。これが唯一のベストプラクティスです。
いいえ、まったくありません。デフォルトまたは "no-arg"コンストラクタは、利用可能なコンストラクタの1つとして、コンストラクタとしてではなく、クラスが持つ便利な機能です。建設中のオブジェクトの重要な不変量を確立するのはです。です。引数を持つコンストラクタは、これを達成するために必要な場合がよくあります。
私は「いいえ」と言います。 Dependency Injectionなどのデカップリングメカニズムを使用する場合、コンストラクタのパラメータは不変の依存関係を定義するのに最適な場所です。同様に、オブジェクトのその他の不変のパラメータは、コンストラクタに入る必要があります。
これについてはさまざまな考えがあります。 JavaBeansパターンはデフォルトのコンストラクタとgetterとsetterがオブジェクトをファイナライズすることを期待しています。しかし、これにより、リムボウの状態になる可能性があります(詳細については、Josh BlochのEffective Javaを参照してください)。あなたは、クラス(別名依存性注入)のインスタンスを作成するために必要なインスタンスを提供するために必要とされるよう
コンストラクタのパラメータは、「魔法」の任意のフォームを防ぎます。
答えは「はい」または「いいえ」ではありません。
しばしば、パラメータ化コンストラクタは不変(final
)の値を持つオブジェクトを初期化するために使用されます。私の頭に最初に来るのは、次の例です。
public class Car {
public Car(String chassisCode) {...}
public String getChassisCode();
public String getLicenseNumber() {...}
public void setLicenseNumber(String value) {...}
}
ナンバープレートの登録番号は車のライフサイクル中に変更できるため、get/setプロパティとして実装できます。代わりにシャシー登録コードは各車に固有であり、は不変です。自動車はいつでもナンバープレートを交換することができますが、ナンバープレートやオーナーが変更されると、シャーシ番号は不変で、マニュアルに登録されます。
他のケースでは、クラスの「デフォルト」の動作を取得するために、「デフォルトの」パラメータのないコンストラクタが必要な場合があります。例
public class LightSwitch {
private boolean state = false; //off
public LightSwitch() {}
public boolean getState();
public void setState(boolean value);
}
明示的にスイッチをオンにしない限り、ライトスイッチはオフと見なされます。
を読んでください「シャシーナンバー」:D –
あなたは最高の説明をしましたが、質問に対する答えは「いいえ、ベストプラクティスではありません」です – hidarikani
- 1. *これは良い考えですか?
- 2. vuex "store"と "data:store"はVue()コンストラクタで最も良いですか?
- 3. ASP.NETページプロパティ良い考え方または悪い考え方
- 4. activerecordをモデルとして、これは良い考えですか?
- 5. ステートフルプロトコルよりもステートレスプロトコルのほうが良いと考えられていますか?
- 6. ODataを使用することも良い考えですか?
- 7. このクラスはなぜ最終的なものと考えられますか?
- 8. FailoverBehaviour - サーバがダウンしていると考えられるもの
- 9. MD5のUUIDが良い考えではないのはなぜですか?
- 10. 所有者とのタグ付けユニットテストは良いアイデアと考えられていますか?
- 11. "net/http"のグローバル変数の使用はgolangの良い習慣と考えられていますか?
- 12. プログラミング言語を意味しないものにしようとするのは良い考えですか?
- 13. Androidサービスのスレッド、これは良い考えですか?
- 14. 各ユーザーのReactPHP httpサーバー、これは良い考えですか?
- 15. オプションStrictは、最後のVisual Studio Updateからオフになっているにも関わらず、オフになっていると考えられます。
- 16. OOP:良いクラスデザイン
- 17. 誤解された良い考え
- 18. Facebook Graph APIはRESTful APIと考えられていますか?
- 19. Firebaseはフロントエンドと考えられていますか?
- 20. C#の属性は継承されていないと考えられています
- 21. hibernate/HQLがあまりにも限られているときに最も良い手段は何ですか?
- 22. エアフローのパラメータをループする最も良い方法は?
- 23. C#のパラメータ化されたコンストラクタからパラメータのないコンストラクタを呼び出す?
- 24. `var self = this`はコードの匂いと考えられますか?
- 25. 最も貪欲なコンストラクタを見つけられないオートファック
- 26. なぜt-sneは監督されていると考えられますか?
- 27. なぜcreateServer()は関数ではないと考えられますか?
- 28. コマンドラインによるセキュリティ:それは良い考えですか? (PHP)
- 29. pthread_cond_wait()のmutexを解放しない原因として考えられるものはありますか?
- 30. JavaScriptのネストされたリテラル、良い考えですか?
答えは「これはベストプラクティスではありませんが、依存性注入にはパラメータのないコンストラクタが必要です。 – hidarikani
依存性注入にはパラメータのないコンストラクタは不要です。代わりに「コンストラクタ注入」 – samlewis