は考えてみましょう:
Order order = new Order("Alan", "Smith", 2, 6, "Susan", "Smith");
パラメータは何を意味するのですか?見つけ出すコンストラクタの仕様を見なければなりません。ビルダーと今
:
Order order = Order.builder()
.originatorFirstName("Alan")
.originatorLastName("Smith")
.lineItemNumber(2)
.quantity(6)
.recipientFirstName("Susan")
.recipientLastName("Smith")
.build();
それはもっと長ったらしいのですが、それは読むことを非常に明確だし、IDEの支援を受けて、それがあまりにも書くのは簡単です。ビルダーそのものはちょっと手間がかかりますが、ロンボクのようなコード生成ツールが役立ちます。
あなたのコードにビルダーが読めるようにする必要がある場合、それは他の匂いを露呈させると主張する人もいます。あまりにも多くの基本タイプを使用しています。あなたは1つのクラスにあまりにも多くのフィールドを入れています。たとえば、考えてみます。
Order order = new Order(
new Originator("Alan", "Smith"),
new ItemSet(new Item(2), 6),
new Recipient("Susan", "Smith"));
...私たちは、シングル責任と少数のフィールドを持つ複数のクラスを使用しているため、ビルダーを使用しなくても自明です。
"可視性"ではなく "可読性"ではありません。そして、理論的には、ビルダーでもっと多くのことを行うことができます。なぜなら、ハーフで初期化されたビルダーを渡すことができるからです。 – luk2302
しかし、ビルダーには欠点があります。すべての必須パラメータを指定する必要はありません。たとえば、コードをリファクタリングしてコンストラクタに必須パラメータを追加すると、ビルダー呼び出し側でコンパイルエラーが発生することはありませんが、実行時にエラーが発生します。 – Joel
半初期化されたビルダーを注意深く渡します。彼らは変更可能です。ロンボクを最初に使用する大きな理由は、不変のオブジェクトです。 – slim