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

2015-11-11 15:49:52 / author: sharkov views 1195Total views: 1195 / 12Views for 7 days: 12
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 18:41:48

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

traditional idl graphics

Змяніць спосаб запісу графічных праграм назаўседы!

2015-11-10 18:01:30

Год або каля таго таму, я ўбіў сабе ў галаву, каб вярнуцца да сваіх каранеў. Я думаў, што гэта будзе...

applications  tools  frameworks Java

прыкладання інструменты асновы — 100% Java (Альбрэхт Вайнерт)

2015-11-10 18:28:09

Java-гэта МЕВАН-лабараторыі "стратэгічнага мову". З моманту яе з'яўлення больш, чым шаснаццаць гадоў таму Java была велізарным поспехам у прамысловых і бізнес...

Вэб-дызайн: з дапамогай WS_FTP

Вэб-дызайн: з дапамогай WS_FTP

2015-11-11 11:48:14

З дапамогай WS_FTP Працэс перадачы файлаў з аднаго месца ў іншае, напрыклад для вашага прасторы на вэб-серверы называецца FTP (пратакол перадачы...