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

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

simula page

Старонка SIMULA

2015-11-02 16:53:03

(з) Ярек Скленар "Гэта было паляпшэннем у параўнанні з большасцю яго пераемнікаў " (Тоні Хоар каментар пра Алголе 60) Аб'ектна-арыентаванае Мадэляванне (ААС) можна...

Virtual Testbed

Віртуальны Выпрабавальны Стэнд

2015-11-02 16:28:04

Author of the original article Gerald Baumgartner Дадзены матэрыял з'яўляецца перакладам арыгінальнай артыкула "The Virtual Testbed" (аўтар Гэральд Баўмгартнер). Embedded-сістэм, паўсюднага,...

introduction to optimization

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

2015-11-02 15:07:26

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

html markup

Гэта разметка назоўнік або дзеяслоў? Ты разметка дадзеных або дадзеныя абгарнуць у тэгі?

2015-11-02 12:30:51

Пастаноўка Задачы Разгледзім гэтыя дадзеныя: Вось я зрабіў "нешта" у дадзеных: Што з'яўляецца пераважным спосабам выказвання таго, што я зрабіў дадзеныя: Я...

Art for designers dkcoin8.com (DesignerKit)