Миграция проекта с С# на 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. Кто-то не имеет понятия о том, что связано с проблемой...
Ответ 14
Возможно, вы могли бы использовать jni4net - bridgeource?
Или список другие параметры Я знаю.