Миграция проекта с С# на Java

С некоторыми изменениями в штатном расписании в офисе уровни опыта С# резко упали, и теперь есть больше разработчиков Java. Он дошел до того уровня, когда более высокие планы рассматривают возможность перемещения существующего .NET-проекта, написанного на С#, в мир Java.

Помимо очевидной проблемы начиная с нуля, каковы возможные пути, которыми эта компания может добиться успешного развития проект .NET С# на Java?

Ответ 1

Вот что нужно рассмотреть:

  • Это большой проект? Если да, попробуйте придерживаться С#
  • Этот проект среднего размера с компонентами? Если нет, попытайтесь придерживаться С#
  • Этот маленький проект предназначен для развертывания только на окнах? Если да, попробуйте придерживаться С#
  • Это старый исходный код? Если да, попробуйте придерживаться С#
  • Используете ли вы API-интерфейсы для ОС Windows? Если да, попробуйте придерживаться С#
  • Используете ли вы сторонние API без Java-партнера? Если да, попробуйте придерживаться С#
  • Используете ли вы .Net в "глубоком" (привязка данных, пользовательские элементы управления и т.д.)? Если да, попробуйте придерживаться С#
  • Время миграции более приемлемо, чем получение новых/преобразованных парней С#? Если нет, попытайтесь придерживаться С#
  • Считаете ли вы, что конечные пользователи не будут восприимчивы к изменениям, если вы хотите использовать платформу Java, которая изменит представление? Если да, попробуйте придерживаться С#
  • Проверить рекламные ролики

Если вы решили конвертировать:

  • Перейти на компонент
  • Перейти на слой
  • Имейте много тестов
  • Проверьте, есть ли инструменты, которые помогут (хотя бы небольшая помощь может быть) с миграцией

Ответ 2

Просто добавлю к мнениям Брайана и Эрика, я бы сказал, что сборка С# для Java-разработчика должна быть простой, на мой взгляд. Это концептуально очень похожие языки, и я бы посоветовал обучить ваших разработчиков Java навыкам С#, чтобы вы не были вынуждены идти на поводу процесса миграции.

Ответ 3

Я подписываюсь на представление Джоэла о том, что полная переписывание почти всегда является ошибкой. Другие плакаты верны: С# и Java достаточно похожи, чтобы любой компетентный разработчик Java мог стать компетентным на С# в течение нескольких недель или месяцев. Это не значит, что они будут экспертами. Это занимает больше времени, но пока у вас есть некоторые разработчики С#, которые могут управлять процессом, тогда вы должны быть в порядке.

Невозможно прокомментировать, является ли такой переход хорошей или плохой идеей, не зная специфики вашего приложения: размер, тип приложения, промышленность и т.д.

Я бы очень сдержанно относился к такому переключателю, потому что, по моему скромному мнению, С# теперь намного более современный язык, чем Java, и я говорю это вам как кто-то разработчик Java за десятилетие (начиная с 1.0.2/1.1 дней).

Это не значит, что Java плохой. Не это. У Солнца есть облако, висящее над ним, и продемонстрировало нежелание или неспособность продвигать платформу в последние годы.

Ответ 4

Независимо от того, какие языки участвуют, руководство этой компании звучит безумно. Что-то другое, кроме тривиального приложения, как экономически разумно переписывать всю базу кода с нуля, а не просто нанимать одного человека с некоторыми навыками на правильном языке? Это бизнес с этой хорошо известной проблемой: слишком много наличных денег?!

Как долго развивается существующий код? Если бы это только началось, я мог бы понять это. Если он увидит выпуск и имеет активных пользователей, никогда не будет смысла выбросить его. Если вы пожертвовали код С# для запуска с правильными навыками, подумайте о том, какую часть головного начала у них было бы над вами.

Ответ 5

Прежде чем завершить преобразование .NET-проекта в Java, все разработчики Java, которые были частью проекта конверсии, узнали С#. Таким образом, вам больше не нужно преобразовывать его в Java (и вы можете выбросить весь код Java, который был создан при преобразовании), потому что теперь у вас есть команда разработчиков, которая может выполнять как Java, так и С#. Задача решена.: D

Ответ 6

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

Ответ 7

Удостоверьтесь, что у вас тонны тестов, потому что такая миграция укусит вас, где вы ожидаете этого меньше.

Ответ 8

У вас есть больше .Net или более Java-приложений на производстве. Если у вас уже есть значительные инвестиции в .Net-серверы и приложения, почему бы не попросить добровольцев среди разработчиков Java перейти на .Net? Язык и синтаксис очень похожи, поэтому сложная часть будет изучать структуру и, если они не потратят все свое время на разработку пользовательского интерфейса, даже изучение структуры не так сложно.

В нашем офисе у нас есть ряд очень хороших разработчиков, которые двигаются вперед и назад между Java и .Net по мере необходимости.

Ответ 9

Чтобы доказать управление, вам всегда нужно говорить с точки зрения ROI и номеров. Покажите им, что если вы переместите эти приложения, вам потребуется огромное количество времени, ресурсов QA, и вы можете легко занять место на заднем сиденье, если оно будет деприоритировано из-за важности какого-либо другого проекта или новой разработки.

У меня был успех, когда я показал им график, ROI, работу, вовлеченные деньги и т.д.

Итак, теперь я думаю, что разработчики Java смогут поддерживать С#, если у них нет фундаментального умственного блока против технологий Microsoft.

Ответ 10

Посмотрите Net2Java, который помогает вам конвертировать ваш код с С# на Java. Я сомневаюсь, что это будет идеально, но его единственный способ удалить много трудностей из задачи, оставив вас с перегибами несовместимых фреймворческих вызовов и языковых функций, чтобы сгладить.

Как только вы это сделаете, ваша задача походит на любой другой проект большой миграции - тест, тест и тест снова. Модульные тесты, тесты системной интеграции, а затем тесты конечных пользователей. Вы должны иметь эти тесты уже на месте, которые вы использовали с оригинальным приложением, кроме модульных тестов, они все равно будут иметь значение.

Ответ 11

Если это решено сделать, вы, скорее всего, выиграете от гибридного подхода, где вы можете в основном смешивать С# и Java в одном приложении, так как это изменит сценарий перехода от водопада к постепенной миграции. Здесь я знаю две возможности:

1) ikvm (http://www.ikvm.net/), которые позволяют запускать Java-код в .NET-runtime. Это позволяет Java-коду вызывать код С# и наоборот. Затем вы можете заморозить разработку кода С# и медленно добавлять пересмотренную функциональность к части Java, сохраняя при этом функциональное приложение.

2) Mainsoft (http://dev.mainsoft.com/Default.aspx?tabid=130), который позволяет компилировать .NET-байт-код в байт-код Java. У них есть бесплатная версия для входа. У меня нет опыта работы с продуктом, но они сильно рекламируют нашу платформу, на которой доступна только Java.

Ответ 12

Я не эксперт по Java, но из моего опыта работы с кодом Java, являющегося поклонником С#, следующие возможные головные боли:

  • Дженерики реализуются по-разному в Java и С#.
  • Бокс /Unboxing поведения отличаются между Java и С#
  • Соглашение об именовании классов Java + серия С# сгенерированный код
  • Обработка строк (т.е. проблемы Unicode/ASCII) может быть проблематичной в зависимости от качества переносимого Java/С# кода.

Лично я не думаю, что писать с нуля - это плохая идея. Поскольку у вас уже есть рабочая архитектура.

Ответ 13

Я несколько удивлен, что никто даже не предложил идею отказа от миграции.

Я не верю, что разработчик С# может быть вынужден переключиться на Java (или наоборот), потому что ему сказали (ну, может быть, он угрожал пистолетом). Я занимаю много времени, упражнений и страсти, чтобы освоить хотя бы один стек технологий. Вы просто не можете начать ночь с новой технологии и рассчитывать на то же качество.

Я бы не стал беспокоиться, пока не сказал, чтобы начать миграцию. В какой момент я бы сказал менеджеру, что я парень .NET и не переключусь на другую технологию только потому, что они решили.

Что касается технической стороны, это отличается не синтаксисом языка, а скорее библиотеками и их функциями. Конечно, если бы все последние колокола и версии .NET 3.5 были широко использованы, разница в языках предоставит вам настоящую проблему.

Это, безусловно, забавный способ, просто решите перенести приложения с .NET на Java. Кто-то не имеет понятия о том, что связано с проблемой...