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

2015-11-11 15:49:52 / author: sharkov views 1060Total views: 1060 / 14Views for 7 days: 14
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

Plain Old Documentation for perl

Модуль PODs

2015-11-02 16:10:24

Дакументацыя для модулі Perl напісана простай мовай разметкі называецца POD (Plain Old Documentation). У гэтым раздзеле паказана, як напісаць модуль...

Research skills

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

2015-11-02 12:10:22

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

Stalling Wing Cross Sections

Одуговлачење Крила Сечений

2015-11-02 12:19:41

Рад је извршена Сзу-Цхуан Ванг. Овај рад је постала могућа захваљујући подршци ВАЗДУХОПЛОВСТВА управљања научних истраживања. Крило штанду Тезга-то је нежељено феномен,...

introduction to optimization

Увядзенне Аптымізацыя, чацвертае выданне

2015-11-02 15:07:26

Эдвін К. П Чон і Станіслав Жак Х. Вайли-міждысцыплінарнага серыі ў дыскрэтнай матэматыкі і аптымізацыі Джон Вайли І Сыны, Інк....