Что такое DSL и где я должен использовать его?

Для Swift-3 и выше:

extension UIImageView {
  public func imageFromUrl(urlString: String) {
    if let url = URL(string: urlString) {
        let request = URLRequest(url: url)
        NSURLConnection.sendAsynchronousRequest(request as URLRequest, queue: .main, completionHandler: { (response, data, error) in
            if let imageData = data as NSData? {
                self.image = UIImage(data: imageData as Data)
            }
        })
    }
  }
}
20
задан CharlesB 20 October 2011 в 08:58
поделиться

7 ответов

DSL's хорош в ситуациях, где необходимо передать некоторому аспекту управления системы кому-то еще. Я использовал их в Механизмах Правил, где Вы создаете простой язык, который легче для менее - технические люди для использования для выражения - особенно в рабочих процессах.

, Другими словами, вместо того, чтобы заставить их изучить Java:

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

я могу записать DSL, который позволяет мне сказать:

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

существуют другие ситуации, но в основном, где угодно Вы могли бы хотеть использовать макроязык, написать сценарий рабочего процесса или позволить подержанную настройку - это все кандидаты на DSL's.

18
ответ дан 30 November 2019 в 00:14
поделиться

DSL обозначает Предметно-ориентированный язык т.е. язык, специально разработанный для решения проблем в данной области.
, Например, Скидку с цены (язык разметки раньше редактировал сообщения на ТАК) можно рассмотреть как DSL.

Лично я нахожу место для DSL почти в каждом крупном проекте, я продолжаю работать. Чаще всего мне нужен некоторый подобный SQL-з¦просу язык. Другое общее использование является основанными на правилах системами, Вам нужен некоторый язык для определения rules\conditions.

DSL имеет смысл в контексте, где это трудно к describe\solve проблеме традиционными средствами.

7
ответ дан 30 November 2019 в 00:14
поделиться

При использовании Microsoft Visual Studio Вы уже используете несколько DSLs - поверхность для дизайна для веб-форм, winforms, и т.д. является DSL. Разработчик Класса является другим примером.

А DSL является просто рядом инструментов, которые (по крайней мере, в теории) делают разработку в определенном "домене" (т.е. визуальная разметка) легче, более интуитивный, и более продуктивный.

До создания DSL, некоторые люди материала как Ayende записали о, связан с "текстом, анализирующим" dsls, позволение разработчикам (или конечные пользователи) вводит "естественный текст" в приложение, которое анализирует текст и генерирует своего рода код или вывод на основе его.

Вы могли использовать любой язык для создания собственного DSL. Microsoft Visual Studio имеет много точек расширяемости и шаблоны & методы "Инструментарий Автоматизации Руководства" и Visual Studio SDK могут помочь Вам в добавлении функциональности DSL к Visual Studio.

4
ответ дан 30 November 2019 в 00:14
поделиться

DSL являются основными компиляторами для пользовательских языков. Хороший 'свободный и открытый' инструмент для разработки их доступен в ANTLR. Недавно, я смотрел на этот DSL для язык конечного автомата использование на новом проекте. Я соглашаюсь с Tim Howland выше, что они могут быть хорошим способом позволить кому-то еще настроить Ваше приложение.

2
ответ дан 30 November 2019 в 00:14
поделиться

К вашему сведению книга по DSLs готовится как часть ряда подписи Martin Fowler.

, Если тот же стандарт как другие книги в ряду, это должно быть хорошее чтение.

[еще 113] информация здесь

2
ответ дан 30 November 2019 в 00:14
поделиться

DSL является просто необычным именем и может означать разные вещи:

  • направляющие (вещь Ruby) иногда называют DSL, потому что она добавляет специальные методы (и перезаписывает некоторые встроенные также) для разговора о веб-приложениях

  • МУРАВЕЙ, синтаксис Make-файла и т.д. является также DSLs, но имеет их собственный синтаксис. Это - то, что я назвал бы DSL.

Один важный аспект этой шумихи: действительно имеет смысл думать о Вашем приложении с точки зрения языка. О чем Вы хотите говорить в Вашем приложении? Они должны затем быть Вашими классами и методами:

  1. Определяют "язык" (или реальный синтаксис, как предложено другими на этой странице или иерархия классов для Вашего любимого языка), который способен к выражению Вашей проблемы.
  2. Решают Вашу проблему с точки зрения того языка.
2
ответ дан 30 November 2019 в 00:14
поделиться

DSL в основном создает Ваш собственный маленький подъязык для решения определенной доменной проблемы. Это решено с помощью объединения в цепочку метода. Языки, где точки и круглые скобки являются дополнительной справкой, делают их, выражение кажется более естественным. Это может также быть подобно шаблону разработчика. DSL не являются самими языками, а скорее шаблоном, что Вы обращаетесь к своему API для совершения вызовов быть больше сам объяснительный.

Одним примером является Guice, Пользовательское Руководство Guice http://docs.google.com/View?docid=dd2fhx4z_5df5hw8 имеет некоторое описание далее вниз того, как интерфейсы связываются с реализациями, и в какой контексты.

Другой типичный пример для языков запросов. Например:

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

В реализации, вообразите каждый метод, возвратившись или новый объект Запроса или просто это обновление себя внутренне. В любой точке можно завершить цепочку при помощи, например, строк () для получения всех строк или updateSomeField, поскольку я сделал выше здесь. Оба возвратят объект результата.

я рекомендовал бы смотреть на пример Guice выше также, поскольку каждый вызов там возвращает новый тип с новыми опциями на них. Хороший IDE позволит Вам завершаться, проясняя, какие опции Вы имеете в каждой точке.

Редактирование: кажется, что многие рассматривают DSLs как новые, простые, единственные языки цели с их собственными синтаксическими анализаторами. Я всегда связываю DSL как использование метода, объединяющего в цепочку как конвенция выразить операции.

0
ответ дан 30 November 2019 в 00:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: