流れるようなインターフェース

流れるようなインターフェース
http://capsctrl.que.jp/kdmsnr/wiki/bliki/?FluentInterface


結構古い記事ですが、用途によっては結構便利そうな印象を受けたので、紹介です。


普通のプログラム

private void makeNormal(Customer customer) {
Order o1 = new Order();
customer.addOrder(o1);
OrderLine line1 = new OrderLine(6, Product.find("TAL"));
o1.addLine(line1);
OrderLine line2 = new OrderLine(5, Product.find("HPK"));
o1.addLine(line2);
OrderLine line3 = new OrderLine(3, Product.find("LGV"));
o1.addLine(line3);
line2.setSkippable(true);
o1.setRush(true);
}


流れるようなI/F

private void makeFluent(Customer customer) {
customer.newOrder()
.with(6, "TAL")
.with(5, "HPK").skippable()
.with(3, "LGV")
.priorityRush();
}


用途によっては、結構便利そうじゃなりませんか?


今書いている為替のプログラムだと、条件に一致する注文を探すとか、条件に一致したら発注するとかいったロジックがあります。そのようなものに適用すると結構書きやすくなるのではないかと思いました。


ただ、「流れるようなI/F」を使うときは、可読性のためにフォーマット設定が結構重要だと思うので、まずそちらからいじる必要がありそうです。ちなみに、フォーマットを変えるとDiffの辺りが結構ダメージを受けるので、本当にやるかどうかはちょっと検討が必要な気がします。