26-07-2007 Luis Artola
A veces no es fácil explicar la diferencia entre la filosofía de un API (Application Programing Interface) y un DSL (Domain Specific Language). La diferencia es una cuestión de matices. Dejó aquí un ejemplo que me he encontrado en una presentación. Creo que habla por si sólo.
Con API:
Car car = new CarImpl();
MarketingDescription desc = new
MarketingDescriptionImpl();
desc.setType(”Box”);
desc.setSubType(”Insulated”);
desc.setAttribute(”length”, “50.5″);
desc.setAttribute(”ladder”, “yes”);
desc.setAttribute(”lining type”, “cork”);
car.setDescription(desc);
Con DSL:
Car car = new CarImpl().withMarketingDescriptionOf(
new MarketingDescriptionImpl(”Box”, “Insulated” ).
andAttributeOf(”length”, “50.5″).
andIncludesA(”ladder”).
andAttributeOf(”lining type”, “cork”));
¿Cuál de los dos es más semántico?
1. Arian Fornaris | September 23rd, 2008 at 6:59 am
Bueno, el tal DSL no tiene mucho de DSL. No siempre podemos, y mucho menos desde Java, aproximarnos a otro lenguaje. Por lo general, con Java se logran alguna aproximación con las anotaciones, que son un mecanismo “más declarativo”.
Mejores DSL internos pueden lograrse en LISP, Python, Ruby. Pero incluso estos lenguajes en ocaciones se hacen incomprensibles, pues los programas parecen una especie de monsrtuo hijo de un DSL y de un lenguage de propósito general.
Solo hay que ver las herramientas para compiladores que utilizan DSLs internos.
2. ¿Métodos encadenados? &hellip | December 30th, 2008 at 9:02 am
[...] fluidas), y forman parte de la técnica para construir DSL´s - Domain Specific Languages, y son una evolución de las API´s u otra forma de escribirlas. Las Fluent Interfaces forman parte de las buenas costumbres para escribir código orientado a [...]