【发布时间】:2011-09-14 07:11:07
【问题描述】:
我想知道您对使用流式接口模式重构长方法的看法。
http://en.wikipedia.org/wiki/Fluent_interface
重构书籍中不包含流利模式。
例如,假设您有这个长方法(名称很长) 做很多事情)
class TravelClub {
Receipt buyAndAddPointsAndGetReceipt(long amount, long cardNumber) {
buy(amount);
accumulatePoints(cardNumber);
return generateReceipt();
}
void buy(int amount) {...}
void accumlatePoints(int cardNumber) {...}
void generateRecepit() {...}
}
称为:
Receipt myReceipt = myTravelClub.buyAndAddPointsAndGetReceipt(543L,12345678L);
这可以重构为:
class TravelClub {
TravelClub buy(long amount) {
//buy stuff
return this;
}
TravelClub accumulatePoints(long cardNumber) {
//accumulate stuff
return this;
}
Receipt generateReceipt() {
return new Receipt(...);
}
}
并称为:
Receipt myReceipt = myTravelClub.buy(543L).accumulatePoints(12345678L).generateReceipt();
从我的角度来看,这是分解长方法和 还要分解它的名字。
你怎么看?
【问题讨论】:
-
只是好奇...这不正是 Facade 模式的反面,在这种模式中,您试图通过提供简单易用的方法或接口来隐藏拥有多个方法或接口的复杂性。
-
@Sandeep,感谢您的意见。是的,但 IMO 这种模式的缺点是方法变得非常大(加上它的名称,加上参数的数量)
标签: java refactoring fluent fluent-interface