Как не повторяться в разных проектах и/или языках

StackOverflow https://stackoverflow.com/questions/113696

  •  02-07-2019
  •  | 
  •  

Вопрос

Я работаю над несколькими разными, но связанными проектами на разных языках программирования.Некоторым из этих проектов необходимо анализировать имена файлов, написанные другими проектами, и ожидать определенного шаблона имен файлов.

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

Это было полезно?

Решение

Лучшим решением (и наиболее элегантным) будет создание предметно-ориентированного языка, а затем его компиляция в код для каждого из целевых языков, которые вы используете.

Создать DSL несложно — встройте его во что-нибудь (например, в Ruby, поскольку он сейчас в моде, или в другой язык, например LISP/Haskell...), или создайте грамматику с нуля (используйте Antlr?) .Вроде проект большой, значит этот путь того стоит.

Другие советы

Я бы сохранил шаблон в простом текстовом файле и, в зависимости от конкретного проекта:

  • Вставьте его в исходный код во время сборки (предварительная обработка).
  • Если вышеперечисленное не является вариантом, рассматривайте его как файл конфигурации, считываемый во время выполнения.

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

Вы можете использовать общий сценарий, процесс или веб-сервис для генерации имен файлов (в зависимости от ваших настроек).

Я не знаю, о каких языках вы говорите, но большинство языков могут использовать внешние динамические библиотеки dll/общие объекты и экспортировать общие функции из этой библиотеки.Например, вы реализуете функцию получения имени файла в простой библиотеке c и используете остальные языки acrros.
Другим вариантом будет динамическое создание общего кода в рамках процесса сборки для каждого языка. Это не должно быть слишком сложно.
Я предлагаю использовать подход динамической компоновки, если это возможно (вы не предоставили достаточно информации, чтобы определить это), поскольку поддерживать это решение будет намного проще, чем поддерживать генерацию кода для разных языков.

Поместите шаблон в базу данных. Самый простой и удобный способ — использовать базу данных XML.Эта база данных будет доступна всем проектам, и они будут читать шаблон оттуда.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top