7 December 2015
All in all, a good introduction to DSLs in the Groovy language
The first chapter is a decent enough introduction, it serves well to setup the rest of the book. It's a nice introduction to the concepts of DSL & explains why Groovy was chosen as the language of choice.
The second chapter introduces Groovy at a basic level, one change from the previous edition that I'm happy was done, was to split the language concepts in depth into a standalone chapter. In the previous edition, the 2nd chapter was a bit of a behemoth.
The third chapter introduces some basic Groovy DSL that you may or may not have heard of. This gives a nice peek into Gradle & Spock & helped me correlate how they are, in fact, DSLs.
The fourth & fifth chapter introduce, in this order, Groovy's concepts (you may skip this if you aren't a total beginner with Groovy), and Closures in Groovy (you could skip this as well, unless you come from a background where closures are new, in that case, don't skip it!)
It's important to note that this book isn't to learn Groovy, (I'd recommend Groovy in Action, 2nd ed from Manning), the basics that you'd need are covered, but no more, and more concepts are introduced as you need them in your DSL. I'm judging it as a gateway to DSLs in Groovy & not as a gateway to Groovy the language. Your mileage may vary, of course.
Chapter 6 is where we dive into our first Groovy DSL, a Twitter client. I'm a little conflicted by the example, which is well done, but I'd personally have chosen something like a Banking example, where you could showcase different domain rules & you'd have a lot of scenarios with tons of boilerplate code in Java, which could be broken down into a Groovy DSL.
Chapters 7 introduce us to some patterns & advanced techniques (or Power Features, as suggested by the chapters title) that we can leverage in our DSLs. This is where I started to sort of disagree with the book. I would have preferred that a single Domain be used as the basis for our example application/DSL, wherein we build it up & make it more feature-rich, by adding the concepts into that single DSL as these concepts are introduced to us.
Don't get me wrong, the examples are clear & do a great job of explaining the concept, e.g. Chapter 10, Building a Builder, has a great example of using these patterns to build a database seed builder (something I've tried to do in Java, only to have it devolve into an unholy mess)
Chapter 8 again does a good job of explaining (what is a tough topic to digest for me) Abstract Syntax Trees (ASTs), I thought it was a neat, well-thought out chapter, with a nice enough example implementation of a state machine at the end.
Chapter 9 shows how Groovy DSLs Spock & Grails implement features & techniques we saw earlier, this is where the book starts to win my attention back. It was nice to see how the techniques we read about earlier are used in real-world, full-fledged DSLs
Chapter 11 & 12 are where it really shines again, first with an example in 11 for a rules based DSL (which should have been our example application from the beginning, in my view) & then with a full-fledged game app, complete with a backing MongoDB & a web based front-end. Again, the examples are well done, the explanation is really great.
Conclusion: If you have the first edition, you could give the 2nd ed a skip. A good book, but the constant switching of contexts lost me from time-to-time. If you're looking to understand how DSLs are implemented (& want to move beyond Java) this is a nice starting point.