В последние несколько месяцев я занимался изучением в мире DSL, которая всегда была темой, которая меня искусила хотят знать больше. И теперь я хочу поделиться этим знанием с вами, чтобы помочь рассеять эту тему.
В этой первой статье я собираюсь сделать введение, и вдоль других статей, я буду углубление, в понятия, которые вращаются вокруг этой темы.
В конце я оставлю ссылку на две книги, что является основой для серии, что буду писать.
Примеры кода будут на Java, но вы можете использовать язык программирования, который вы хотите.
Итак, поехали!!
Язык предметной области
Что было бы предметно-ориентированных Языков ?
В основном это язык, созданный для определенного домена с выразительностью, ограничено.
Ок! Не сказал много, давай.
DSL не перестает быть языком программирования, так что будут использовать человека, чтобы поручить компьютеру выполнять что-то. И, как и любой язык, его структура предназначена для облегчения понимания человека. Другой язык программирования общего назначения, где, как правило, обеспечивает множество функций, таких как: поток управления, структуры данных и другие вещи, DSL имеет минимум необходимых ресурсов, которые являются полезными для вашего домена, поэтому выразительности языка должно быть ограничено.
У вас не будет строить всего программного Обеспечения в DSL, который будет делать-это использовать DSL для определенной точкой системы.
Вспомнив, Фокус-это в Домене.
Преимущество создания DSL создать язык легко понять, как для специалистов области, так и разработчикам.
O Модель
Важным понятием, которое необходимо отметить, является Семантической Модели. Но что это?
Семантическая Модель это двигатель, который обеспечивает поведение. Он определяет семантику, то есть то, что делает, когда работает.
Хорошо и DSL?
DSL обеспечивает способов заполнения этой модели.
Нельзя запутать Семантическая модель) – Модель предметной области, Модель Семантической это самое простое, что может быть только одна структура данных, поскольку Модель предметной области имеет тенденцию быть более сложным. Я знаю, это основное, что объяснение, но я не хочу подробно эту тему сейчас, пока мы будем стоять только на основы.
Стоит отметить, что Семантическая Модель является важной частью в строительства DSL. Вы можете столкнуться с Dsl, который не используют Семантической Модели, но желательно, чтобы почти всегда использовать его.
С тем, чтобы построить DSL, вы должны грамматика и семантика, грамматика, порядок слов и семантики, что будет работать с этим порядком.
Здорово! Мы хотим, чтобы код
Я покажу вам пример DSL Внутренняя отправки электронной почты.
Семантическая Модель
public class Email { private Remetente remetente; private Listdestinatarios; private Assunto assunto; public Email(Remetente remetente, List destinatarios, Assunto assunto) { this.remetente = remetente; this.destinatarios = destinatarios; this.assunto = assunto; } public boolean enviar(Mensagem mensagem) { // Lógica de envido de email... } }
public class Destinatario { private String email; public Destinatario(String email) { this.email = email; } public String getEmail() { return email; } }
public class Remetente { private String email; public Remetente(String email) { this.email = email; } public String getEmail() { return email; } }
public class Mensagem { private String corpo; public Mensagem(String corpo){ this.corpo = corpo; } public String getCorpo() { return corpo; } }
public class Assunto { private String titulo; public Assunto(String titulo) { this.titulo = titulo; } public String getTitulo() { return titulo; } }
Внутренний DSL
public class EmailDSL { private EmailDSL() {} public static void email(String de, String[] para, String assunto, String corpo) { Listdestinatarios = Arrays.asList(para) .stream() .map(email-> new Destinatario(email)) .collect(Collectors.toList()); new Email(new Remetente(de), destinatarios, new Assunto(assunto)).enviar(new Mensagem(corpo)); } public static String de(String de) { return de; } public static String[] para(String... para) { return para; } public static String assunto(String assunto) { return assunto; } public static String mensagem(String corpo) { return corpo; } }
@Test public void dslFuncaoAninhada() { email( de("remetente@email.com.br"), para("destinatario1@email.com.br", "destinatario2@email.com.br"), assunto("E-mail Teste"), mensagem("Esse E-mail serve para teste do Modelo Semântico") ); }
Этот пример является только введение DSL Внутренней используя вложенные функции, есть и другие способы создания DSL. На протяжении серии статей, я буду решении некоторых из них.
Dsl Внутренних и Внешних Dsl
Существует две категории Dsl, внутренних и внешних. Внутренние используют язык хозяина, в случае, если, например, был использован в Java. Внешняя используют собственный язык не ограничиваясь, язык хозяина и находятся в отдельных файлах из файлов с кодом на языке программирования. Не будем вдаваться в подробности о том, что идея-это показать, что есть типа Dsl.
Только я собираюсь сосредоточиться на Dsl, Внутренние.
Не все цветы
Одна из проблем, которые я вижу в использовании DSL является поддержание язык, так что все разработчики в команде нужны будут иметь необходимые знания для разработки и поддержания DSL.
Другой вопрос вступления нового члена в команде, кроме того, что время на изучение всей системы, есть кривая обучения, в строительстве (DSL), которая часто может стать длинной, в зависимости от опыта разработчика.
То, что я могу оставить его как совет, оценки сложности домена, в случае, если какая-либо часть вашего домена, будет трудно выразить с помощью языка общего назначения, может быть, это время создания DSL для лучше выразить намерение, что будет работать.
Помните, DSL добавляет слой в вашей системе, всегда является допустимым, оценить сколько вы будете зарабатывать при добавлении этого слоя.
Мы приходим, в конце концов! Спасибо за чтение, и я надеюсь, что вам понравилось.
Ссылка
- DSL – Языки Конкретных Домена – Мартин Фаулер
- DSL – Сломайте барьер между развитием и бизнес – Леонардо Отто
Оригинал: “https://dev.to/oliveirarafael/dsl-o-inicio-3i8e”