Вопрос

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

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

Это было полезно?

Решение

Вот что следует учитывать:

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

Если вы решите преобразовать:

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

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

Я добился успеха, когда показал им сроки, рентабельность инвестиций, объем проделанной работы, вложенные деньги и т.д.

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

Взгляните на Net2Java ( нет2джава ), который предназначен для оказания помощи в преобразовании вашего кода с C # на Java.Я сомневаюсь, что это будет идеально, но это один из способов избавить вас от многих рутинных задач, оставляя вас с перегибами несовместимых вызовов фреймворка и языковых функций, которые нужно сгладить.

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

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

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

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

Я не эксперт по Java, но, исходя из моего опыта работы с Java-кодом, будучи поклонником C #, ниже приведены некоторые из возможных головных болей:

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

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

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

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

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

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

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

Возможно, вы могли бы использовать jni4net - мост с открытым исходным кодом ?Или список другие варианты Я знаю.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top