Построитель Выразаў

2015-11-11 15:49:52 / author: sharkov views 1609Total views: 1609 / 25Views for 7 days: 25
Thanks to Best cliparts
source article: http://martinfowler.com/bliki/ExpressionBuilder.html

Построитель Выразаў

Марцін Фаулер

8 жніўня 2013

Адна з праблем, з FluentInterface заключаецца ў тым, што яго вынікі ў якой-то дзіўнай гледзячы метадаў. Разгледзім такі прыклад:

customer.newOrder()

.with(6, "TAL")

.with(5, "HPK").skippable()

.with(3, "LGV")

.priorityRush();

Метады як з, пропускаемыми, і priorityRush не сядзяць добра на заказ класа. Найменне добра працуе ва ўмовах невялікі DomainSpecificLanguage, што свабодна дае інтэрфейс, але мы звычайна чакаем API у выглядзе таго, што я называю каманду-запыт да API. У каманду-запыт да API кожны метад у асобнасці мае сэнс у любым кантэксце. Ен можа таксама гонару такія прынцыпы як CommandQuerySeparation якія ў Java азначае, што метады, якія змяняюць ObservableState аб'екта не павінен мець якое вяртаецца значэння. Змешванне свабодна-стыль метады з каманднага метады запыту можа прывесці да блытаніны, таму што метады могуць свабодна парушаць чакання таго, што большасць API павінен выглядаць.

У Построителе выразаў з'яўляецца рашэннем гэтай праблемы. Выраз забудоўшчыка з'яўляецца асобны аб'ект, на якім мы вызначаем інтэрфейс, які затым свабодна перакладаецца ў свабодна выклікі базавай рэгулярныя выклікі API. Так у построителе выразаў для замовы выпадку будзе выглядаць прыкладна наступным чынам.

public class OrderBuilder {

private Order subject = new Order();

private OrderLine currentLine;

public OrderBuilder with(int quantity, String productCode) {

currentLine = new OrderLine(quantity, Product.find(productCode));

subject.addLine(currentLine);

return this;

}

public OrderBuilder skippable() {

currentLine.setSkippable(true);

return this;

}

public OrderBuilder priorityRush() {

subject.setRush(true);

return this;

}

public Order getSubject() {

return subject;

}

}

У гэтым выпадку ў мяне есць адзін построитель выразаў клас, але вы можаце таксама мець невялікую структуру будаўнікі, што-то накшталт заказчыка забудоўшчыка, загад будаўнік, і будаўнік лініі. Выкарыстоўваючы адзін аб'ект значыць вам патрэбна шанец для адсочвання якой лініі вы працуеце на Для пропускаемыми спосаб. З дапамогай мадэлі можна пазбегнуць гэтага, але крыху больш складана і трэба забяспечыць нізкі ўзровень будаўнікоў можа справіцца метады, якія прызначаны для больш высокага парадку будаўнікоў. У гэтым выпадку OrderLineBuilder б неабходнасць дэлегавання метадаў усе метады OrderBuilder.

Дадатковая Літаратура

Я больш падрабязна раскажуць аб будаўнікі выраз у маей кнізе па прадметна-арыентаваных моў

Добрая, адкрытая прыклад выкарыстання построителя выразаў знаходзіцца ў JMock бібліятэка. Я знайшоў OOPSLA паперы, якая апісвае эвалюцыю JMock ў МКД апрацоўка вельмі карысная.

Перагляд Гісторыі

Упершыню апублікавана 4 студзеня 2007 года. Перагледжаны 8 Жніўня 2013.

paper4pc
Add a comment:
Sign in

See also

Енергетичні Ресурси: Гідроелектростанції

Енергетичні Ресурси: Гідроелектростанції

2015-11-02 10:55:06

Введення Ми використовували проточну воду як джерело енергії протягом тисяч років, в основному, для помелу кукурудзи. Перший будинок у світі, який...

У jquerymobile падручнік.

У jquerymobile падручнік.

2015-11-02 14:56:51

Чаму падручнік пра jQuery мабільнага? Вы звярнулі ўвагу, што не існуе, акрамя афіцыйнага сайта jQuery мабільнага, падручнікі, якія тлумачаць гэты прадмет...

CS Research Topic Generator

CS даследуе генератар тэм ці Як выбраць добрую тэму ў 10 секунд

2015-11-02 13:04:40

Інфарматыка сутыкаецца з сур'езным перашкодай на шляху да далейшых даследаваннях. Праблема з'яўляецца найбольш відавочнай са студэнтамі, але засмучае многіх даследчыкаў...

Research skills

Истраживачке вештине

2015-11-02 12:10:22

Писање чланака, дајући истраживачког разговора, писање научних и сугестије су кључне вештине, али они нису тако једноставне. У овом одељку...

Art for designers dkcoin8.com (DesignerKit)