Перенос проекта из C # в Java - PullRequest
10 голосов
/ 11 апреля 2009

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

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

Ответы [ 14 ]

19 голосов
/ 11 апреля 2009

Вот что нужно учитывать:

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

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

  • Перейти на компонент
  • Перейти на слой
  • Есть много тестов
  • Проверьте, есть ли инструменты, которые могут помочь (хотя бы небольшая помощь) с миграцией
15 голосов
/ 11 апреля 2009

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

5 голосов
/ 12 апреля 2009

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

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

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

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

4 голосов
/ 12 апреля 2009

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

4 голосов
/ 12 апреля 2009

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

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

2 голосов
/ 11 апреля 2009

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

2 голосов
/ 11 апреля 2009

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

1 голос
/ 13 апреля 2009

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

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

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

1 голос
/ 11 апреля 2009

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

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

1 голос
/ 11 апреля 2009

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

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

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

...