how do we know it works?chatley.com/spa2008/chatley-hill-dsl-slides.pdf · title: how do we know it...

20
Writing Embedded Domain Specific Languages in Java Robert Chatley and Mike Hill [email protected] [email protected]

Upload: others

Post on 13-Oct-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: How do we know it works?chatley.com/spa2008/chatley-hill-dsl-slides.pdf · Title: How do we know it works? Created Date: 20080318121717Z

Writing Embedded Domain Specific Languages in Java

Robert Chatley and Mike [email protected] [email protected]

Page 2: How do we know it works?chatley.com/spa2008/chatley-hill-dsl-slides.pdf · Title: How do we know it works? Created Date: 20080318121717Z

Large projects have lots of code

Page 3: How do we know it works?chatley.com/spa2008/chatley-hill-dsl-slides.pdf · Title: How do we know it works? Created Date: 20080318121717Z

Intention is often unclear

Page 4: How do we know it works?chatley.com/spa2008/chatley-hill-dsl-slides.pdf · Title: How do we know it works? Created Date: 20080318121717Z

“…a good programmer in these times does not just

write programs … a good programmer does language

design, though not from scratch, but building on the frame of a base language”

- Guy Steele Jr.

Page 5: How do we know it works?chatley.com/spa2008/chatley-hill-dsl-slides.pdf · Title: How do we know it works? Created Date: 20080318121717Z

Different domains have specific languages

Page 6: How do we know it works?chatley.com/spa2008/chatley-hill-dsl-slides.pdf · Title: How do we know it works? Created Date: 20080318121717Z

Internal vs External

Page 7: How do we know it works?chatley.com/spa2008/chatley-hill-dsl-slides.pdf · Title: How do we know it works? Created Date: 20080318121717Z

Make use of factories

Page 8: How do we know it works?chatley.com/spa2008/chatley-hill-dsl-slides.pdf · Title: How do we know it works? Created Date: 20080318121717Z

class Coffee { Coffee(boolean milk, boolean sugar){ ... }}drink = new Coffee(true, true);

Page 9: How do we know it works?chatley.com/spa2008/chatley-hill-dsl-slides.pdf · Title: How do we know it works? Created Date: 20080318121717Z

class Coffee { Coffee(boolean milk, boolean sugar){ ... }}drink = new Coffee(true, true);

class Coffee { static Coffee withMilkAndSugar() { return new Coffee(true, true); }}drink = Coffee.withMilkAndSugar();

Page 10: How do we know it works?chatley.com/spa2008/chatley-hill-dsl-slides.pdf · Title: How do we know it works? Created Date: 20080318121717Z

Code to a fluent interface

Page 11: How do we know it works?chatley.com/spa2008/chatley-hill-dsl-slides.pdf · Title: How do we know it works? Created Date: 20080318121717Z

class Coffee { void setMilk(boolean milk){ this.milk = milk; }}drink.setMilk(true);drink.setSugars(2);

Page 12: How do we know it works?chatley.com/spa2008/chatley-hill-dsl-slides.pdf · Title: How do we know it works? Created Date: 20080318121717Z

class Coffee { void setMilk(boolean milk){ this.milk = milk; } Coffee withMilk() { milk = true; return this; }}drink.setMilk(true);drink.setSugars(2);

drink.withMilk().withSugars(2);

Page 13: How do we know it works?chatley.com/spa2008/chatley-hill-dsl-slides.pdf · Title: How do we know it works? Created Date: 20080318121717Z

The Builder pattern…

Page 14: How do we know it works?chatley.com/spa2008/chatley-hill-dsl-slides.pdf · Title: How do we know it works? Created Date: 20080318121717Z

Order order = Order.forDrinks( Coffee.black(), Tea.withMilk() ) .toTakeAway();

order.build();

// or perhaps order.make();

Page 15: How do we know it works?chatley.com/spa2008/chatley-hill-dsl-slides.pdf · Title: How do we know it works? Created Date: 20080318121717Z

Order order = Order.forDrinks( Coffee.black(), Tea.withMilk() ) .toTakeAway();

drinks = order.build();

// or perhaps drinks = order.make();

a vararg method is nice here

Page 16: How do we know it works?chatley.com/spa2008/chatley-hill-dsl-slides.pdf · Title: How do we know it works? Created Date: 20080318121717Z

Build or extract layers

Page 17: How do we know it works?chatley.com/spa2008/chatley-hill-dsl-slides.pdf · Title: How do we know it works? Created Date: 20080318121717Z

Auction Exercise

We've coded up an auction and some bidders

– Bidders have different strategies– Refactor bidders so their strategies can

be described as a DSL– We've provided acceptance tests to keep

you safe

Page 18: How do we know it works?chatley.com/spa2008/chatley-hill-dsl-slides.pdf · Title: How do we know it works? Created Date: 20080318121717Z

Retrospective What did you learn? What went well?What went badly?Puzzles?Ideas?

Page 19: How do we know it works?chatley.com/spa2008/chatley-hill-dsl-slides.pdf · Title: How do we know it works? Created Date: 20080318121717Z

Feedback Interesting? Useful? What could be improved?

Page 20: How do we know it works?chatley.com/spa2008/chatley-hill-dsl-slides.pdf · Title: How do we know it works? Created Date: 20080318121717Z

Acknowledgments

John AyresPaul Carey

Steve FreemanNat Pryce

Joe WalnesTom White