2008-09-03 20 views
19

Escucho cada vez más acerca de los lenguajes de dominio específicos que se lanzan y cómo cambian la forma en que trata la lógica empresarial, y he visto Ayende's blog posts y cosas, pero nunca he entendido exactamente por qué tomaría mi negocio lógica lejos de los métodos y situaciones que estoy usando en mi proveedor.¿Qué es un DSL y dónde debería usarlo?

Si usted tiene algunos antecedentes uso de estas cosas, cualquier posibilidad de que pudiera ponerlo en términos reales laymans:

  • DSLs ¿Qué es exactamente la construcción de medios?
  • ¿Qué idiomas está utilizando?
  • ¿Dónde utilizar un DSL tiene sentido?
  • ¿Cuál es el beneficio de usar DSL?

Respuesta

17

de DSL son buenos en situaciones en las que es necesario dar algún aspecto de control del sistema a otra persona. Los he usado en Rules Engines, donde se crea un lenguaje sencillo que es más fácil de usar para la gente menos técnica, especialmente en flujos de trabajo.

En otras palabras, en vez de hacerlos aprender Java:

DocumentDAO myDocumentDAO = ServiceLocator.getDocumentDAO(); 
for (int id : documentIDS) { 
Document myDoc = MyDocumentDAO.loadDoc(id); 
if (myDoc.getDocumentStatus().equals(DocumentStatus.UNREAD)) { 
    ReminderService.sendUnreadReminder(myDoc) 
} 

Puedo escribir una DSL que me permite decir:

for (document : documents) { 
if (document is unread) { 
document.sendReminder 
} 

hay otras situaciones, pero, básicamente, en cualquier lugar que podría desea utilizar un lenguaje de macros, crear secuencias de comandos para un flujo de trabajo o permitir la personalización en el mercado secundario; todos estos son candidatos para DSL.

+0

Pero lo que realmente haya personas sin conocimientos técnicos haciendo eso? – BobbyShaftoe

+0

probablemente sea mejor describirlas como técnicas diferentes; son expertos en personalización, no codificadores de Java. –

+1

espero que sepas que tu DSL es python. –

6

DSL significa dominio específico del lenguaje lenguaje es decir, diseñado específicamente para resolver problemas en la zona determinada.
Por ejemplo, Markdown (lenguaje de marcado utilizado para editar publicaciones en SO) se puede considerar como una DSL.

Personalmente encuentro un lugar para DSL en casi todos los grandes proyectos que estoy trabajando. La mayoría de las veces necesito algún tipo de lenguaje de consulta similar a SQL. Otro uso común son los sistemas basados ​​en reglas, necesita algún tipo de lenguaje para especificar reglas/condiciones.

DSL tiene sentido en el contexto en el que es difícil de describir \ resolver el problema por medios tradicionales.

0

DSL es básicamente crear su propia sublengua pequeña para resolver un problema de dominio específico. Esto se resuelve usando el método de encadenamiento. Los idiomas donde los puntos y los paréntesis son opcionales ayudan a que estas expresiones parezcan más naturales. También puede ser similar a un patrón de generador. DSL no son idiomas en sí mismos, sino más bien un patrón que aplica a su API para que las llamadas sean más fáciles de entender.

Un ejemplo es Guice, Guice Users Guide http://docs.google.com/View?docid=dd2fhx4z_5df5hw8 tiene alguna descripción más abajo de cómo interfaces están vinculadas a las implementaciones, y en qué contextos.

Otro ejemplo común es para los lenguajes de consulta. Por ejemplo:

NewsDAO.writtenBy("someUser").before("someDate").updateStatus("Deleted") 

En la implementación, imagina que cada método devuelve un nuevo objeto Query o simplemente esta actualización internamente. En cualquier punto, puede finalizar la cadena utilizando, por ejemplo, rows() para obtener todas las filas, o updateSomeField como he hecho anteriormente aquí. Ambos devolverán un objeto resultante.

lo recomiendo echar un vistazo al ejemplo Guice anteriormente, así como cada llamada no devuelve un nuevo tipo con nuevas opciones en ellos. Un buen IDE le permitirá completar, dejando en claro qué opciones tiene en cada punto.

Editar: parece que muchos consideran como DSL, nuevos lenguajes de propósito sencillas, individuales con sus propios programas de análisis. Siempre asocie DSL como el método de encadenamiento como una convención para expresar operaciones.

1

DSL es sólo un nombre elegante y puede significar cosas diferentes:

  • rieles (lo Rubí) a veces se llama una conexión DSL, ya que añade métodos especiales (y sobrescribe algunos que ya vienen también) para hablando de aplicaciones web

  • ANT, la sintaxis Makefile, etc. también son DSL, pero tienen su propia sintaxis. Esto es lo que yo llamaría DSL.

Un aspecto importante de este bombo: Tiene sentido pensar en su aplicación en términos de una lengua. ¿De qué quieres hablar en tu aplicación? Éstos entonces deben ser sus clases y métodos:

  1. definir una "lengua" (ya sea una sintaxis real como propuesto por otros en esta página o una jerarquía de clases de su idioma favorito) que es capaz de expresar su problema.
  2. Resuelve tu problema en términos de ese lenguaje.
4

Si utiliza Microsoft Visual Studio, ya está utilizando múltiples DSL: la superficie de diseño para formularios web, winforms, etc. es una DSL. El Diseñador de clases es otro ejemplo.

Un DSL es simplemente un conjunto de herramientas que (al menos en teoría) hacen que el desarrollo en un "dominio" específico (es decir, diseño visual) sea más fácil, más intuitivo y más productivo.

En cuanto a la construcción de una DSL, algunas de las cosas sobre las que ha escrito Ayende están relacionadas con el "texto sintáctico" dsls, permitiendo a los desarrolladores (o usuarios finales) ingresar "texto natural" en una aplicación que analiza el texto y genera algún tipo de código o resultado basado en él.

Puede usar cualquier idioma para construir su propia DSL. Microsoft Visual Studio tiene una gran cantidad de puntos de extensibilidad, y los patrones & prácticas "Guidance Automation Toolkit" y Visual Studio SDK pueden ayudarlo a agregar funcionalidad DSL a Visual Studio.

2

DSL son compiladores básicos para los idiomas personalizados. Una buena herramienta 'libre y abierta' para desarrollarlos está disponible en ANTLR. Recientemente, he estado buscando en esta DSL para un uso state machine language en un nuevo proyecto. Estoy de acuerdo con Tim Howland de arriba, que pueden ser una buena manera de dejar que otra persona personalice su aplicación.

2

FYI, un libro sobre DSL está en la tubería como parte de la serie de la firma de Martin Fowler.

Si es del mismo estándar que los otros libros de la serie, debería ser una buena lectura.

Más información here

Cuestiones relacionadas