2009-02-07 18 views
16

Bien, este es el campo de minas, pero tratar de entender por qué uno elegiría .NET (o Mono equivalente) para el desarrollo multiplataforma sobre el otro toolkit es difícil sin experiencia en ambos..NET o Mono vs Qt, ¿cuál de ellos para el desarrollo multiplataforma?

Para programadores que pueden haber usado ambos, ¿qué características se perderán o se desean? Por el contrario, ¿qué es lo que un usuario de uno encontraría que falta del otro en términos de paradigma o algún otro aspecto? Hay mucho que decir sobre cualquiera de los juegos de herramientas, pero los comentarios de alguien que los haya usado serán valiosos.

Estas son algunas de las preguntas relacionadas con el tema:

Editar: haría con Mono solamente ser una o viable ption si Windows fue una de las plataformas objetivo?

+0

En cuanto a su última pregunta, sí, podría simplemente orientar a Mono si decide seguir esa ruta, aunque requeriría que sus usuarios tengan Mono instalado, mientras que .NET Framework viene instalado en las versiones más recientes de Windows. –

Respuesta

7

Debería elegir Mono (y quizás C#) para el desarrollo multiplataforma por la misma razón que alguien elegiría Java o Python. Estos lenguajes se ejecutan en una máquina virtual y si tiene cuidado al elegir bibliotecas y diseñar código, funcionará en varias plataformas (sin recompilación). Los lenguajes nativos (como C, C++) tienen estándares, por lo que el idioma es el mismo en múltiples plataformas, pero las configuraciones y bibliotecas del compilador que usted utiliza pueden no ser multiplataforma (por ejemplo, procesos, redes, etc.).

Además de los problemas técnicos, la familiaridad de un marco multiplataforma ahorra tiempo. P.ej. aprender una biblioteca GUI puede tomar semanas/meses. Obviamente vas a ahorrar tiempo si la API es la misma en todos los objetivos.

Qt4 está bien diseñado, bien documentado y viene con algunas herramientas útiles y sólidas. wxWidgets se está volviendo masivo con docenas de widgets, algunos de los cuales nunca usarás. Qt tiene menos widgets que son más flexibles. Solía ​​usar wx bastante pero ahora soy un convertido Qt gracias a la licencia LGPL, los buenos documentos, el diseñador, PyQt, el nuevo IDE y la creciente base de usuarios.

Tanto Qt como wxWidgets tienen enlaces Python (es decir, PyQt y wxPython) por lo que podría escribir código de GUI multiplataforma utilizando estas bibliotecas. Para Mono es más complicado pero hay GTK # y Qyoto. No he probado ninguno de estos pero parece que están llegando a un punto en el que son lo suficientemente maduros como para ser utilizados (por ejemplo, vea MonoDevelop).

+1

Qt tiene enlaces en más idiomas de los que me importa enumerar – jrharshath

+0

Ha pasado un tiempo, pero esta respuesta parece ser la más informativa. – casualcoder

+0

¿Puedo usar Qt Community Edition para crear aplicaciones comerciales (de propiedad) para fines comerciales? –

0

¿Has considerado wxWidgets? También es multiplataforma, C++ como QT y usa controles nativos a diferencia de QT, y no requiere ningún framework para ejecutarse como .NET.

.NET y mono son casi lo mismo, si está escribiendo aplicaciones sencillas basadas en el usuario con poca programación del sistema o de la red, .NET debería ser el mejor.

Si el rendimiento es un aspecto crítico de la aplicación, mucha gente usa bibliotecas C++ como QT, wxWidgets.

+0

¿Esta respuesta hace algo por usted: http://stackoverflow.com/questions/464463/qt-being-now-released-under-lgpl-would-you-recommend-it-over-wxwidgets/464689#464689 – casualcoder

+0

cómo ¿Puedo usar un LGPL QT en mi aplicación comercial? Voy solo con wxWidgets que seleccioné después de una larga investigación. Sus rápidos controles nativos, C++, multiplataforma. http://stackoverflow.com/questions/464463/qt-being-now-released-under-lgpl-would-you-recommend-it-over-wxwidgets/465803#465803 –

+0

Vincule las bibliotecas LGPL Qt dinámicamente. Esto cumple con los requisitos de la LGPL. Por supuesto, reescribir un corpus de código existente simplemente para usar otra biblioteca podría no valer la pena. A veces lo es. – casualcoder

-2

.NET no es para plataformas cruzadas. Es muy doloroso codificar y hacer que funcione efectivamente para MONO y .NET. La razón por la cual las personas van con .NET más que TCL/Tk o Qt o Java Swing es debido al rápido desarrollo de aplicaciones.

RAD es prácticamente imposible con cualquiera de los otros marcos que existen. RAD es posible en casos simples, pero cuándo fue la última vez que escribió una aplicación basada en negocios que tenía casos de uso simples.

En general, es difícil trabajar con los juegos de herramientas de GUI porque debe comprender los conceptos básicos. Los aspectos básicos son el enlace de datos, el recorte, la actualización, los administradores de diseño y el manejo de eventos. Todos estos conceptos son difíciles para los desarrolladores promedio. La razón es que la mayor parte se está abstrayendo con más kits de herramientas modernas. Por ejemplo, con Java Swing no necesito saber nada sobre clipping o refreshing ya que lo hacen "mágicamente" para mí. Lo que sucede en el caso de que algo no se actualice mágicamente, esa situación presenta una solución virtualmente imposible. El código se vuelve exponencialmente más complejo.

.NET es utilizado normalmente por muchos desarrolladores de interfaces de usuario porque su extensión es muy simple. Crear un método de extensión para extender un control es muy fácil. Crear un método para enlazar datos es incluso más simple con .NET entity framework. Sin embargo, hay un costo para usar esta herramienta RAD, y es que no es independiente de la plataforma.

+0

¿Podría explicar detalladamente "doloroso"? – EricSchaefer

+0

@EricSchaefer: sospecho que las diferencias entre .NET y Mono lo hacen así. – casualcoder

+1

No lo sé, esto es discutible. Qt es bastante maldita RAD. – mxcl

5

Para multiplataforma (y plataforma única) iría a Qt porque es más limpio que Mono y Windows.Formularios y con el patrón MVC toda la aplicación es más fácil de expandir y modificar

+5

¿Cómo es Qt "más limpio"? – EricSchaefer

+0

¡Secundado! Cualquier detalle o expansión en las diferencias bienvenida. – casualcoder

+3

++ más limpio. – jrharshath

1

Quizás pueda escribir la mayor parte de la aplicación en un lenguaje/framework portátil, y escribir un "skin de interfaz gráfica" para cada sistema operativo que planee ¿apoyar? Esa estrategia, por supuesto, puede funcionar bien en algunos casos, pero puede fallar horriblemente en muchos otros.

+3

en caso de Qt, incluso la "máscara" se puede escribir junto con la aplicación. El marco garantiza que la "piel" tenga un aspecto y tacto nativos. – jrharshath

4

Estoy usando Qt4 para el desarrollo multiplataforma y estoy muy contento con él. La implementación funciona bien (al menos si vincula Qt estáticamente, lo cual no es nada difícil), la API es realmente agradable y consistente y Qt Designer permite un rápido desarrollo de las partes de la GUI para que uno pueda concentrarse en la lógica real. El concepto de señal y ranura también es algo que me gusta mucho después de acostumbrarme.

Desde mi experiencia, la implementación con el despliegue de wxWidgets es más difícil (en mi caso, era específicamente Linux debido a la dependencia de GTK, no tenía idea de Mac).

1

Aquí hay otra opción que no mencionas, y no mencioné mencionar aquí, pero Lazarus es una plataforma cruzada, y está madurando a medida que avanza. Por supuesto, como algo escrito en Qt, tendrías que compilarlo para plataformas específicas. En mi caso, he usado Lázaro con éxito en un proyecto que se ejecuta en Mac OSX, Linux y Windows. Lazarus es una buena herramienta RAD, y Object Pascal funciona bien para la mayoría de las cosas que he escrito. Lazarus es una buena opción para la velocidad de la aplicación. Se compara bien con el software escrito en c/C++. No voy a molestarme en respaldarlo, hay estudios de casos y usted puede hacer sus propias pruebas si lo necesita.

Mi impresión de la codificación en C# utilizando MonoDevelop ha sido que la biblioteca, específicamente html, y el audio son un poco desafiantes. Solo he estado jugando con C#/MonoDevelop durante algunos meses, así que todavía soy bastante nuevo con todo el kit. Supongo que hay un poco de precio de velocidad para pagar, ya que es código administrado. Una vez más, creo que la investigación sugeriría que el código compilado solo a menudo tiene una ventaja de velocidad sobre el código C#/.NET.

Por supuesto, otra opción sería Java. No he hecho tanto allí, pero ciertamente es omnipresente y funciona bien. De nuevo, esperaría que el código Java fuera más lento que el código compilado, como c/C++/Pascal.

Otra opción que viene a la mente que tiene compiladores para las tres plataformas principales es Eiffel. No he estado haciendo mucho con esto en estos días, pero me gustaba cuando jugaba con él. ymmv

Cuestiones relacionadas