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

2015-11-11 15:49:52 / author: sharkov views 1242Total views: 1242 / 5Views for 7 days: 5
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-10 16:22:39

Валідатары супраць Линта: якая розніца? Савет: зразумець, што такое валідатар і линтер з'яўляюцца, што розніца паміж імі складаецца, і як яны...

GPS Overview

Агляд па GPS

2015-11-10 10:21:02

Увядзенне У GPS праграма была пачата ў 1973 годзе, калі ў ВПС ЗША, арміі, флоту, марской пяхоты і абароны супастаўленне агенцтва...

Ванілін

Ванілін

2015-11-10 09:11:50

Сайман Коттон школа Аппингам, Ратленд, Вялікабрытанія Гэта так жа, як Ваніль? Няма. Ванілін з'яўляецца...

Выспы Кука: Што такое ў наша мінулае

Выспы Кука: што ў нашым мінулым

2015-11-10 16:13:08

Папярэдне Еўрапейскага Жыхары выспаў Кука з'яўляюцца сапраўдныя Палінезійцы, лепшых маракоў з велізарнага Ціхага акіяна, вандроўцы на крохкае каноэ, які адчуваў сябе...