Миграция проекта от C# до Java

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

Более целесообразно использовать указатели на функции и массив для них.

Пример:

typedef int (*TFoo)(int);

int foo1(int x)
{
    printf("from foo1: x = %d\n", x);
    return 0;
}

int foo2(int x)
{
    printf("from foo2: x = %d\n", x);
    return 0;
}

TFoo foos[2] = {foo1, foo2};
#define foo(i, x) foos[i](x)

Вот и все. Надеюсь, это поможет

10
задан Community 23 May 2017 в 12:02
поделиться

13 ответов

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

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

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

  • Перейти на компонент
  • Перейти на слой
  • Есть много тестов
  • Проверьте, есть ли инструменты для помощь (как бы небольшая помощь ни была) с миграцией
19
ответ дан 3 December 2019 в 13:19
поделиться

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

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

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

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

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

0
ответ дан 3 December 2019 в 13:19
поделиться

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

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

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

0
ответ дан 3 December 2019 в 13:19
поделиться

Если будет решено сделать это, вы, скорее всего, выиграете от гибридного подхода, в котором вы можете в основном смешивать 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-байт-код. У них есть бесплатная версия входа. У меня нет опыта работы с продуктом,

1
ответ дан 3 December 2019 в 13:19
поделиться

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

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

1
ответ дан 3 December 2019 в 13:19
поделиться

Do you have more .Net or more Java applications in production. If your already have a substantial investment in .Net servers and applications, why not ask for volunteers among the Java developers to move to .Net? The language and syntax is very similar, so the hard part would be learning the framework and unless they would spend all their time doing UI development even learning the framework is not that hard.

In our office we have a number of very good developers who move back and forth between Java and .Net as needed.

1
ответ дан 3 December 2019 в 13:19
поделиться

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

1
ответ дан 3 December 2019 в 13:19
поделиться

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

2
ответ дан 3 December 2019 в 13:19
поделиться

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

4
ответ дан 3 December 2019 в 13:19
поделиться

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

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

4
ответ дан 3 December 2019 в 13:19
поделиться

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

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

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

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

5
ответ дан 3 December 2019 в 13:19
поделиться

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

15
ответ дан 3 December 2019 в 13:19
поделиться

Это действительно зависит от того, что вы хотите сделать. По моему опыту, что-то маленькое, сделанное вручную поверх Webob, действительно хорошо для API. Но для полноценных сайтов, которые нуждаются в шаблонах / сессиях / сложной маршрутизации / кэшировании, трудно справиться с django.

Примите во внимание, что если вы используете огромные фреймворки (например, django 1.0), первый запрос всегда занимает около 3 секунд, чтобы загрузить все в память и сохраняет его там в течение 15 секунд после этого запроса.

И пока вы выбираете фреймворки, учтите, что:

  • ORM не применяются к платформе, поэтому в основном не имеют значения.
  • Быстрые шаблоны ( как Гепард) не будет быстрым (или даже работать), поскольку они не могут использовать расширения C.
  • Кэширование может быть самой важной вещью, чтобы сделать все быстро.
2
ответ дан 3 December 2019 в 13:19
поделиться