Различия между Java и С# и .NET
Извините заранее за возможную нить огня, но это не то, что я собираюсь сделать.
Я только делал серьезную разработку в Linux с помощью C и С++, и я хочу сделать шаг в Windows. Я занимался чтением и просил, и мне кажется, что .NET с С# - это способ разработки коммерческих бизнес-приложений для Windows.
Большое внимание для меня - это интеграция пользовательского интерфейса в рабочий стол, так как это то, с чем пользователь в конечном итоге взаимодействует. Возможно ли, например, воссоздать внешний вид графического интерфейса Office 2007 в Java или это возможно только с .NET?
Я также обеспокоен переносимостью. В будущем я могу портировать приложение в Linux. Я знаю об монопроекте, но мне интересно, не будет ли лучше идти с Java.
Короче говоря, каковы компромиссы между Java и С# при разработке коммерческих, ориентированных на пользователя бизнес-приложений, предназначенных в первую очередь для Windows?
Ответы
Ответ 1
Самый важный бит - в "в первую очередь предназначен для Windows".
Если вам нужно работать только с Windows, С#, вероятно, будет намного лучше, чем Java. Там есть лучшее разнообразие визуальных стилей, которые хорошо сочетаются с Windows. Он также делает взаимодействие с собственным кодом (например, битами API Win32 или COM-библиотек) проще, чем Java. Лично я предпочитаю его как язык, но это другое дело.
Если вам нужно работать на других платформах, я бы серьезно рассмотрел Java. В то время как Mono имеет довольно много импульсов, он не имеет такой же степени совместимости с .NET, что и Java на разных платформах он поддерживает.
Таким образом, в основном, взвешивайте "очень хочу, чтобы порт" был очень осторожен - это фактор роста в решении, с моей точки зрения. После того, как вы решили сделать порт, неважно, если 90% ваших клиентов находятся в Windows - ему все равно придется работать и работать хорошо, а остальные 10%.
Ответ 2
Прежде всего, будет ли ваш графический интерфейс хорошо смотреться в окнах, будет больше зависеть от вашего мастерства с графическим интерфейсом, чем он будет по вашему выбору языка или инструментария.
Windows Forms действительно не дает вам полного доступа к функциям графического интерфейса Windows, используя документированный API. Вам придется совершать вызовы для встроенных функций API или, по крайней мере, использовать сообщения, специфичные для Windows, для достижения некоторых эффектов. Кроме того, я не думаю, что есть встроенный способ доступа к ленточному элементу Office 2007. Для этого вам понадобится сторонний компонент.
Многие приложения .Net полагаются на набор виджетов сторонних разработчиков для достижения привлекательных графических интерфейсов. Будьте предупреждены, что они часто полагаются на P/Invoke или другие функциональные функции, специфичные для Windows, и поэтому не работают над моно. Поэтому, если вы действительно хотите графический интерфейс кросс-платформы,.NET не лучший выбор.
Вы также можете использовать .Net GUI в Windows Presentation Foundation, но опять же это не поддерживается в моно.
GTK # хорошо работает в Unix и Windows, хотя он выглядит немного менее родным в Windows.
Java Swing - очень кроссплатформенная платформа и выглядит довольно неплохо, учитывая внешний вид платформы. Вы можете загрузить Netbeans, чтобы увидеть его в действии.
SWT - альтернативный набор инструментов для Java, который имеет немного меньшую межплатформенную совместимость, чем Swing, но по-прежнему популярен. Eclipse использует этот инструментарий, поэтому загрузите его, чтобы увидеть его в использовании.
Ответ 3
Поскольку у вас есть выход с С++, вы можете пойти с С++ плюс Qt для графического интерфейса. Это хорошая библиотека графического интерфейса кросс-платформы, и вы можете перекомпилировать код для работы в Windows, Mac и Linux с постоянным взглядом.
Конечно, вы можете создавать с ним приятные интерфейсы, но, возможно, не так классно, как интерфейс MS Office (Microsoft blend).
Вы можете рассмотреть это как вариант.
http://www.qtsoftware.com/products/
Примеры
http://www.qtsoftware.com/qt-in-use
Ответ 4
Если приложение предназначено в первую очередь для Windows - используйте .NET.
Если вы серьезно относитесь к переносу позже - избегайте использования функций P/Invoke,.NET выше 2.0 и сторонних инструментов с богатым графическим интерфейсом (которые не работают в Mono)
Здесь представлены приятные и коммерческие кросс-платформенные приложения .NET, включая приятный http://www.codicesoftware.com/xpfront.aspx
пластиковый scm UI http://www.plasticscm.com/screenshots/gui27/visual/brexplorer04.png
и многие другие - http://www.mono-project.com/Companies_Using_Mono
Также многие разработчики предпочитают VS IDE над Eclipse и С# над Java. Но если ваше приложение в первую очередь Windows - я уверен, что лучше использовать .NET. ОСОБЕННО, если интеграция с графическим интерфейсом является главной проблемой, поскольку создание приложений Java выглядит как родная Windows, все еще болезненная. В .NET есть множество элементов управления для интерфейса ленты (в том числе и родного). Попробуйте найти то же самое для Java с правильным внешним видом, и вы поймете, что я имею в виду
С Mono (если вы будете соблюдать основные правила) большую часть времени у вас не будет проблемы с переносом и вложением Mono внутри вашего приложения.