Rails + C # - Повторное использование моделей
-
12-09-2019 - |
Вопрос
Я работаю над проектом, у которого есть веб-сайт на Rails и графический интерфейс C #, которые используют одну и ту же базу данных и модели данных.Я хотел бы разделить (активные) модели между двумя частями.Есть какие-нибудь идеи о том, как это возможно?
Решение
IronRuby предназначен именно для этого.
Вам нужно будет запустить Ruby on Rails с помощью IronRuby (вы также можете сделать это через IIS), а затем вы сможете вызывать свои сборки C # так, как будто они были библиотеками Ruby.
Некоторые ресурсы, которые помогут вам начать:
- http://IronRuby.net - официальный сайт с некоторой документацией (не полной, но вы найдете там полезную информацию)
- http://www.IronShay.com - мой блог с несколькими постами о IronRuby.Вы также можете связаться со мной через контактную форму, если вам нужны дополнительные указания
- http://www.ruby-forum.com/forum/34 - Форум IronRuby / список рассылки, вопросы, на которые отвечают члены сообщества IronRuby, а также члены команды.
Другие советы
Короткий ответ заключается в том, что вы не можете этого сделать, не переопределив их в графическом интерфейсе C #.Вы можете предоставить контроллеры как WSDL / SOAP вместо restful, тогда вы можете попросить visual studio сгенерировать прокси для вас.C # действительно плох в динамических вещах, поэтому вы не можете просто взять модели ruby и повторно использовать их в C #, потому что их нужно скомпилировать.
Конечно, вы можете написать свой собственный инструмент генерации прокси для "restful" ресурсов rails, но в конце концов вам придется каким-то образом дублировать код модели.
Как говорит Шей, вы можете использовать IronRuby для устранения разрыва, но это зависит от того, хотите ли вы повторно использовать классы ActiveRecord или используете веб-сайт в качестве точки доступа к данным?Если вы хотите повторно использовать модели activerecord, то IronRuby - это способ общения с вашей базой данных (но для хорошей интеграции с C # вам пришлось бы создавать строго типизированные оболочки вокруг моделей, так что я действительно не вижу в этом смысла).
Первое, что приходит мне в голову, это разоблачить Веб-службы RESTful из приложения Rails и используйте эти сервисы в вашем клиентском приложении C #.Я не знаю способа избежать дублирования, если вы хотите, чтобы POCO были в вашем приложении на C # - возможно, напишите CodeSmith или шаблон T4, который считывает schema.rb и генерирует POCO.