Building User-Friendly DSLs you own this product

'); $(document.body).append('
loading reading lists ...
'); function adjustReadingListIcon(isInReadingList){ $readingListToggle.toggleClass("fa-plus", !isInReadingList); $readingListToggle.toggleClass("fa-check", isInReadingList); var tooltipMessage = isInReadingList ? "edit in reading lists" : "add to reading list"; $readingListToggle.attr("title", tooltipMessage); $readingListToggle.attr("data-original-title", tooltipMessage); } $.ajax({ url: "/readingList/isInReadingList", data: { productId: 1135 } }).done(function (data) { adjustReadingListIcon(data && data.hasProductInReadingList); }).catch(function(e){ console.log(e); adjustReadingListIcon(false); }); $readingListToggle.on("click", function(){ if(codePromise == null){ showToast() } loadCode().then(function(store){ store.requestReadingListSpecificationForProduct({ id: window.readingListsServerVars.externalId, manningId: window.readingListsServerVars.productId, title: window.readingListsServerVars.title }); ReadingLists.ReactDOM.render( ReadingLists.React.createElement(ReadingLists.ManningOnlineReadingListModal, { store: store, }), document.getElementById("reading-lists-modal") ); }).catch(function(e){ console.log("Error loading code reading list code"); }); }); var codePromise var readingListStore function loadCode(){ if(codePromise) { return codePromise } return codePromise = new Promise(function (resolve, reject){ $.getScript(window.readingListsServerVars.libraryLocation).done(function(){ hideToast() readingListStore = new ReadingLists.ReadingListStore( new ReadingLists.ReadingListProvider( new ReadingLists.ReadingListWebProvider( ReadingLists.SourceApp.marketplace, getDeploymentType() ) ) ); readingListStore.onReadingListChange(handleChange); readingListStore.onReadingListModalChange(handleChange); resolve(readingListStore); }).catch(function(){ hideToast(); console.log("Error downloading reading lists source"); $readingListToggle.css("display", "none"); reject(); }); }); } function handleChange(){ if(readingListStore != null) { adjustReadingListIcon(readingListStore.isInAtLeastOneReadingList({ id: window.readingListsServerVars.externalId, manningId: window.readingListsServerVars.productId })); } } var $readingListToast = $("#reading-list-toast"); function showToast(){ $readingListToast.css("display", "flex"); setTimeout(function(){ $readingListToast.addClass("shown"); }, 16); } function hideToast(){ $readingListToast.removeClass("shown"); setTimeout(function(){ $readingListToast.css("display", "none"); }, 150); } function getDeploymentType(){ switch(window.readingListsServerVars.deploymentType){ case "development": case "test": return ReadingLists.DeploymentType.dev; case "qa": return ReadingLists.DeploymentType.qa; case "production": return ReadingLists.DeploymentType.prod; case "docker": return ReadingLists.DeploymentType.docker; default: console.error("Unknown deployment environment, defaulting to production"); return ReadingLists.DeploymentType.prod; } } }); } });
Meinte Boersma
Foreword by Federico Tomassetti
  • October 2024
  • ISBN 9781617296475
  • 504 pages
  • printed in black & white

pro $24.99 per month

  • access to all Manning books, MEAPs, liveVideos, liveProjects, and audiobooks!
  • choose one free eBook per month to keep
  • exclusive 50% discount on all purchases

lite $19.99 per month

  • access to all Manning books, including MEAPs!

team

5, 10 or 20 seats+ for your team - learn more


Look inside
Craft domain-specific languages that empower experts to create software themselves.

Domain-specific languages put business experts at the heart of software development. These purpose-built tools let your clients write down their business knowledge and have it automatically translated into working software—no dev time required. They seamlessly bridge the knowledge gap between programmers and subject experts, enabling better communication and freeing you from time-consuming code adjustments.

Inside Building User-Friendly DSLs you’ll learn how to:

  • Build a complete Domain IDE for a car rental company
  • Implement a projectional editor for your DSL
  • Implement content assist, type systems, expressions, and versioning language aspects
  • Evaluate business rules
  • Work with Abstract Syntax Trees
  • Reduce notated DSL content in concrete syntax into abstract syntax

Building User-Friendly DSLs takes you on a carefully-planned journey through everything you need to create your own DSLs. It focuses on building DSLs that are easy for busy business experts to learn and master. By working through a detailed example of a car rental company, you'll see how to create a custom DSL with a modern and intuitive UI that can replace tedious coding activities.

about the technology

Here’s the central problem of software development: business users know what they need their apps to do, but they don’t know how to write the code themselves. As a developer, this means you spend a lot of time learning the same domain-specific details your user already knows. Now there’s a way to bridge this gap! You can create a Domain-Specific Language (DSL) that empowers non-technical business users to create and customize their own applications without writing any code.

about the book

Building User-Friendly DSLs teaches you how to create a complete domain-specific language that looks and works like a web application. These easy-to-use DSLs put the power to create custom software into the hands of business domain experts. As you go, you’ll cover all the essentials, from establishing structure and syntax of your DSL to implementing a user-friendly interface.

what's inside

  • Implement a projectional editor for your DSL
  • Work with Abstract Syntax Trees
  • Evaluate business rules

about the reader

For developers with JavaScript and web development experience.

about the author

Meinte Boersma is a senior developer and an evangelist of model-driven software development and DSLs.

If you want to make your non-developer colleagues 10 times more productive, this is the book for you! You would be hard-pressed to find any skill that would have a bigger impact.

Federico Tomassetti, Strumenta

A unique source of insight into state-of-the-art DSL tooling. Effectively combines bird’s-eye-view explanations with practical examples.

Václav Pech, JetBrains

A down to earth approach to developing DSLs that’s easily accessible to all JavaScript developers.

Jos Warmer, DSL architect

Guides the reader through a simple framework based on web technologies, touching on important aspects of DSL implementation along the way.

choose your plan

team

monthly
annual
$49.99
$399.99
only $33.33 per month
  • five seats for your team
  • access to all Manning books, MEAPs, liveVideos, liveProjects, and audiobooks!
  • choose another free product every time you renew
  • choose twelve free products per year
  • exclusive 50% discount on all purchases
  • Building User-Friendly DSLs ebook for free

choose your plan

team

monthly
annual
$49.99
$399.99
only $33.33 per month
  • five seats for your team
  • access to all Manning books, MEAPs, liveVideos, liveProjects, and audiobooks!
  • choose another free product every time you renew
  • choose twelve free products per year
  • exclusive 50% discount on all purchases
  • Building User-Friendly DSLs ebook for free
RECENTLY VIEWED