Я хотел бы создать набор объектов домена на нескольких языках, чтобы можно было ориентироваться на разные платформы. Я смотрел на внешние DSL как на способ определения языка для моего домена, а затем потенциально писал адаптеры, которые генерируют код для языков, которые меня интересуют для таргетинга. Это лучший способ решить эту проблему? Или проще поддерживать несколько версий проекта?
Как лучше всего создать несколько языковых версий домена?
Ответы (4)
Извините за поздний ответ, но поскольку вы упоминаете C # как свой основной язык, эта практически полностью поддерживаемая технология на основе Visual Studio - это именно то, что вы ищете.
Вы должны понимать, что вы хотите абстрагировать с помощью своих DSL, но к тому же поддержка нескольких платформ тривиальна.
Заявление об ограничении ответственности: это наша технология, но она публично открыта и решает именно проблему, представленную в вопросе.
http://abstraction.codeplex.com/
Примечание! Помните о самой «альфа-стадии» текущей загрузки, я предлагаю вам пропустить заархивированную загрузку и взять последний исходный код. Я обновляю лучшую конструкцию в относительно ближайшем будущем. Ознакомьтесь с реализацией «Context» в решении «Production / Dev / AbstractionTemplate».
Трудно быть полезным, не понимая, для чего вы планируете использовать свой DSL.
Переносимость - это ваша главная проблема? Для успешного нацеливания на эти разные платформы вам, вероятно, все равно придется поддерживать слои, специфичные для платформы (сгенерированные или нет).
Если вы планируете написать все свое приложение в своем DSL, а затем используйте свой собственный компилятор, чтобы преобразовать его в исполняемый код для каждой платформы, что ж, скорее всего, это плохая идея, слишком сложная и чрезмерно запроектированная.
Однако, если у вас есть четко определенный фрагмент платформенно-независимой логики, тогда DSL - хороший выбор. Просто напишите для него интерпретатор на каждой целевой платформе (при условии, что производительность не критична, это также проще и проще, чем генерировать код).
Как лучше всего создать несколько языковых версий домена?
Это (было?) Каким-то образом идея Model Driven Architecture (MDA). Цитата Модельно-управляемая архитектура из Википедии:
Подход, основанный на модельно-ориентированной архитектуре, определяет функциональность системы с помощью платформенно-независимой модели (PIM) с использованием соответствующего предметно-ориентированного языка (DSL).
Затем, учитывая модель определения платформы (PDM), соответствующую CORBA, .NET, Интернету и т. Д., PIM преобразуется в одну или несколько моделей, зависящих от платформы (PSM), которые могут запускаться компьютерами. Это требует сопоставлений и преобразований и тоже должно моделироваться.
PSM может использовать различные доменные языки (DSL) или язык общего назначения (GPL), например Java, C #, PHP, Python и т. Д. Этот перевод обычно выполняют автоматические инструменты.
В зависимости от сложности вашего домена и доступности инструмента MDA это может быть вариант (с более низкой стоимостью внедрения).
Смотрите также
- MDA: Хорошая идея, стыдно за ... < / а>
- Языковые инструменты и архитектура на основе моделей
- UML и доменные языки
- DSL в контексте UML и GPL
- UML или DSL: какой медведь лучший? (обязательно прочтите Вот этот)