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

2015-11-11 15:49:52 / author: sharkov views 2256Total views: 2256 / 2Views for 7 days: 2
Thanks to Best cliparts, Automotive world
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.

Add a comment:
Sign in

See also

North Korea Satellite Launch

Паўночная Карэя (КНДР) запуск спадарожніка ў 2012 годзе. Пагрозы балістычных ракет.

2015-11-10 18:25:39

прадстаўленыя Майк Грунтмане як частка інжынераў тыдзень святкавання у універсітэце Паўдневай Каліфорніі, Люты 2013 Аб Майк Грунтмане Дадзеная прэзентацыя слайды як PDF Прамую...

logical fallacy

Што такое лагічная памылка?

2015-11-10 19:03:45

А "памылка" - гэта памылка, і "лагічны" зман-памылка ў развагах. Есць, вядома, іншыя віды памылкай, чым памылкі ў развагах. Напрыклад,...

Юрких

Spritely

2015-11-10 19:23:32

Spritely ўяўляе сабой просты убудова з толькі два ключавых метадаў, спрайт() і пан() якія проста аніміраваць фонавы малюнак ўласцівасці CSS...

Інтэрв'ю з Вінсэнтам Лэ Муа

2015-11-10 18:41:48

Вінцэнт-вельмі заняты чалавек. Ен з'яўляецца рухаючай сілай Agiledesigners, Minicons і Fontastic. Ен пайшоў ад фрыланс да стварэння аднаго з самых...

Free stock photo jooinn.com (For your works)