Как лучше всего создать несколько языковых версий домена?

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


person Shane Fulmer    schedule 09.07.2010    source источник
comment
Какой язык программирования вы используете?   -  person BrunoLM    schedule 12.07.2010
comment
Мой основной язык - C #, но я хотел бы, возможно, также ориентироваться на android и iphone (например, на Java и Objective-C).   -  person Shane Fulmer    schedule 12.07.2010
comment
Есть ли у этих доменных объектов поведение или это просто данные?   -  person naikus    schedule 13.07.2010
comment
У них будет поведение в дополнение к данным.   -  person Shane Fulmer    schedule 13.07.2010


Ответы (4)


Я думаю, что Apache Thrift выполнит то, о чем вы просите.

person StackedCrooked    schedule 16.07.2010

Извините за поздний ответ, но поскольку вы упоминаете C # как свой основной язык, эта практически полностью поддерживаемая технология на основе Visual Studio - это именно то, что вы ищете.

Вы должны понимать, что вы хотите абстрагировать с помощью своих DSL, но к тому же поддержка нескольких платформ тривиальна.

Заявление об ограничении ответственности: это наша технология, но она публично открыта и решает именно проблему, представленную в вопросе.

http://abstraction.codeplex.com/

Примечание! Помните о самой «альфа-стадии» текущей загрузки, я предлагаю вам пропустить заархивированную загрузку и взять последний исходный код. Я обновляю лучшую конструкцию в относительно ближайшем будущем. Ознакомьтесь с реализацией «Context» в решении «Production / Dev / AbstractionTemplate».

person Kalle Launiala    schedule 10.02.2011

Трудно быть полезным, не понимая, для чего вы планируете использовать свой DSL.

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

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

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

person Eldritch Conundrum    schedule 13.07.2010
comment
Идея заключалась в том, чтобы создать четко определенный фрагмент платформенно-независимой логики в DSL, а затем использовать его для генерации или каким-либо образом создавать версии на разных языках. Что вы имеете в виду под переводчиком? Да, переносимость будет главной проблемой. - person Shane Fulmer; 14.07.2010

Как лучше всего создать несколько языковых версий домена?

Это (было?) Каким-то образом идея Model Driven Architecture (MDA). Цитата Модельно-управляемая архитектура из Википедии:

Подход, основанный на модельно-ориентированной архитектуре, определяет функциональность системы с помощью платформенно-независимой модели (PIM) с использованием соответствующего предметно-ориентированного языка (DSL).

Затем, учитывая модель определения платформы (PDM), соответствующую CORBA, .NET, Интернету и т. Д., PIM преобразуется в одну или несколько моделей, зависящих от платформы (PSM), которые могут запускаться компьютерами. Это требует сопоставлений и преобразований и тоже должно моделироваться.

PSM может использовать различные доменные языки (DSL) или язык общего назначения (GPL), например Java, C #, PHP, Python и т. Д. Этот перевод обычно выполняют автоматические инструменты.

В зависимости от сложности вашего домена и доступности инструмента MDA это может быть вариант (с более низкой стоимостью внедрения).

Смотрите также

person Pascal Thivent    schedule 18.07.2010