Есть ли варианты лучше, чем перенос с C # на Java?

У меня есть существующая библиотека, написанная на C #, которая обертывает гораздо более низкоуровневый TCP / IP API и предоставляет сообщения, приходящие по проводам с сервера (проприетарный двоичный протокол) как события .NET. Я также предоставляю вызовы методов для объекта, который обрабатывает сложности маршалинга удобных типов .NET (таких как System.DateTime) вплоть до двоичных кодировок и структур фиксированной длины, которые требуются API (для исходящих сообщений на сервер). На его основе построено изрядное количество существующих приложений (как внутренних, так и сторонних). (Я могу думать о 32/64-битных проблемах, проблемах с порядком байтов и общих ошибках, которые могут возникнуть во время переноса и т. Д.)

Другой вариант, который я вкратце рассмотрел, - это как-то подстроить Mono до Java, чтобы я мог использовать весь существующий код C #, который у меня уже есть. Я не слишком осведомлен о том, насколько гладким будет опыт разработчиков для Java-разработчиков, которые должны его использовать. Я почти уверен, что большая часть кода должна работать без проблем под Mono (за исключением декомпрессии P / Invoke, который, вероятно, в любом случае должен быть перенесен на C #).

В идеале я бы не хотел добавлять еще один уровень TCP / IP, каналы и т. Д. Между моим кодом и клиентским Java-приложением, если я могу ему помочь (так что WCF на стороне Java WS-DeathStar, вероятно, отсутствует). Я никогда не занимался серьезной разработкой на Java, но я горжусь тем фактом, что в настоящее время библиотека - это кусок пирога, который сторонний разработчик может интегрировать в свое приложение (если, конечно, он использует .NET :)), и я хотел бы иметь возможность чтобы сохранить ту же простоту использования для любых Java-разработчиков, которым нужен такой же опыт.

Так что, если у кого-то есть мнение о 3 вариантах, которые я предложил (портировать на Java и поддерживать дважды, портировать на C и написать тонкий язык привязки для .NET и Java или, попробуйте интегрировать Java и Mono), или любые другие предложения, которые я хотел бы услышать.

Спасибо

Изменить: после разговора непосредственно с разработчиком на клиенте (например, удаление сломанный телефон AKA Sales Department) требования изменились настолько, что этот вопрос больше не подходит для моей непосредственной ситуации. Тем не менее, я' Я оставлю вопрос открытым в надежде, что мы сможем выработать еще несколько хороших предложений.

В моем конкретном случае клиент фактически запускает машины Windows в дополнение к Solaris (а кто не работает в наши дни?) и рад, что мы напишите приложение (службу Windows) поверх библиотеки и предоставьте им гораздо более упрощенный и меньший по размеру TCP / IP API для кодирования. Мы переведем их простые сообщения в формат, который понимает нижестоящая система, и переведем входящие ответы обратно для их использования, чтобы они могли продолжать взаимодействовать с этой нижестоящей системой через свое приложение Java.

Возвращение к исходному сценарию. подумав об этом пару недель, у меня есть еще несколько комментариев:

  • Переносимая библиотека на основе C с различными языковыми привязками наверху, вероятно, была бы лучшим вариантом, если бы вы заранее знали, что вам нужно поддерживать несколько языков / платформ.

  • В * nix может быть один процесс одновременно размещать среду выполнения Java и среду выполнения Mono? Я знаю, что в более ранних версиях .NET у вас не могло быть двух разных сред выполнения .NET в одном процессе, но я считаю, что они исправили это с помощью .NET 4? Если это возможно, как можно общаться между ними? В идеале вам понадобится что-то столь же простое, как вызов статического метода и делегат для получения ответов.

  • Если нет простой прямой поддержки интерфейса между Java и Mono (методы и делегаты и т. Д.), Можно подумать об использовании чего-то вроде ZeroMQ с буферами протокола или Apache Thrift в качестве формата сообщения. Это будет работать в процессе, между процессами и по сети, так как ZeroMQ поддерживает различные транспорты.

5
задан Terence Lewis 12 May 2011 в 15:12
поделиться