views:

437

answers:

10

From a programmer stuck in the web world...

What are the most common desktop development "frameworks" currently being used for desktop application development?

  1. Is it realistic to write desktop software for both Windows and OS X?

  2. Is it realistic to use the same base code to write the business/data layers for an application that will have a partial web UI as well as a desktop UI?

+1  A: 
  1. Yes. You could use Java, Python/ Ruby etc with a cross platform UI framework, AIR etc etc.

  2. Yes it is realistic. Build it on a client/server model and most of the code will fit either the desktop or web UI model.

If you went down the .NET root, you could use Silverlight for the web app, .NET server code for the backend and even Mono to enable you to develop for OS X.

If you took the Java route, Java runs within the browser, there is JavaFX coming soon that is a small flash-like version for browsers. It runs on just about all OS's and can handle the backend just fine.

Flex/ AIR offers an excellent way of developing desktop and web-based apps for OS X, Windows and Linux, but you'll need another language for the back-end. .NET, Java, PHP etc all work fine as the backend though.

Edit
At MrJeepster's request, here are details on interfacing an AIR frontend and .NET backend:

There are two ways you can interface AIR to a .NET backend: the DIY way and the remoting way.

The DIY way would involve defining your own (probably XML) data formats and using the low level HTTP request objects to communicate with a HTTP server, or even lower level socket classes to communicate with some other server.

The remoting way is all together easier as nice people have written a selection of free remoting packages:

http://www.adobe.com/devnet/flashremoting/articles/intro_flremoting_net.html
http://www.themidnightcoders.com/flashorb/gettingStarted.htm
http://www.fluorinefx.com/

Remoting involves sharing objects between the client and server. So you create some object on the AIR client, get the remoting framework to serialise it, transfer it to the server and deserialise it into a .NET object. The server then processes it and sends it, or a new object, back again via the same route.

David Arno
Could you give some more details on how AIR would work with a >net language as the back-end?
+1  A: 
  1. Yes, think QT
  2. Yes, think SOA
Treb
+1  A: 

Qt (either on C++ or python) is fully portable between mac/win/linux. it also includes QtWebKit, so it's easy to embedd a real, modern browser in your app.

Javier
+1  A: 
  1. I might suggest Qt if you are looking for cross platform. We used it around here a few years back. It's license is per developer and pricey though (at least it was then).

  2. Sure, you can make use of web services.

Chris Kloberdanz
+2  A: 

While cross platform desktop development is possible, it's not easy. At a minimum, you have to test on every supported platform. And you have to make difficult compromises: do you make your software look exactly the same on every platform (and hence not look like a native app anywhere) or do you use native controls and deal with different alignment etc on various platforms? Besides appearance, what behavior do you use? For example, UNIX software sorts case-sensitively but Windows software does not. Do you pick one sort order on both platforms, or do you sort differently on each platform?

John D. Cook
+1  A: 

Going with .NET and mono is a decent choice.

kenny
Not compared to java
willcodejavaforfood
True @willcodejavaforfood. When you can find java progs that are willing to code for nearly free, just right spec it up and throw in dog food. ;)
kenny
A: 

Adobe AIR was mentioned by David Arno. Does anyone have any experience or knowledge regarding that platform?

updated...thank you!
I've updated my answer to address AIR and .NET specifically.
David Arno
A: 

We've built many multi-tier, cross-platform apps using Java. On desktop Swing worked REALLY weel for us.

A: 

We are building a small cross platform app ourselves using Java (Swing) and it's really nice. At least so far. :D

A: 

I use REALbasic to create a wide variety of desktop applications for both Mac OS X and Windows. It works quite well.

It doesn't lend itself well to creating separate layers to share with desktop/web UIs, though.

Paul Lefebvre