views:

573

answers:

5

Now is time to write all for web-based applications? Write web applications is slower than winforms-based applications?

When to write web based and when to write desktop based?

+6  A: 

You should write all your applications with the logic in a separate layer so that you can easily write a web interface or a winforms interface depending on changing business decisions.

On a more serious note. You should create a web application when you need lots of users accessing and changing lots of shared data. You should build desktop apps when there is very little shared data, or when the sharing of data is simple enough that emailing files back and forth is sufficient. Web applications are usually a lot more difficult to get right, so you should only take on the extra work if necessary. It's a lot more work to to the programming right, and it's a lot more work to maintain the application server and database. However, web applications are instantly updateable, so you can start with something small, and everybody using the application can get new features and fixes as they are finished. So you have to decide which is more important. There are a few trade offs no matter which you choose.

Kibbee
While your second paragraph is very good, your first paragraph is where the wisdom lies. Take heed! I wish I could vote this up 100 times!
rp
The first half of your second paragraph sort of undermines the first paragraph. Also, Windows apps can be made to be very updateable.
BobbyShaftoe
Also web-based applications don't have to run on your servers. In fact, customers can install them on their own computers if vendor distributes source or binaries (eg. fogbugz, sugarcrm and so on..)
lubos hasko
You don't have to have them run them on your own servers, but then there's the problem of coding them, and supporting them as they run on your customers' servers, which is a whole other problem.
Kibbee
A: 

Have you explored the option of creating a Smart Client

Michael Kniskern
+2  A: 

It's like everything - there's a time and a place. You choose the architecture based on the demands of the project. There's no right solution to all scenarios.

I tend to write a web application if I need lots of users with low power machines to access a high performance data store. If I'm writing utility applications to interact with files and such, then I'd write a WinForms application. So it really depends...

Also, if you're writing a highly interactive application that requires a lot of immediate feedback to the user, then it's usually easier/faster to code a WinForms application and it's simpler to maintain... however, the trade off is that it's harder to rollout to a large company where lots of machines require access to that software... so then you need to start thinking about how you could achieve that functionality in a Web Application.

There's no "right" way to do it and no "wrong" way - it's a matter of reviewing the project requirements and evaluating the technology available and making the best decision at the time.

BenAlabaster
A: 

Look at WPF/Silverlight. It solves the problem. And if you have to access something on a client PC then, of course, standalone rules over thin client (at least for now)

mannicken
A: 

I had worked in projects on where both types of applications are needed, it all have to do with your requirements if you don't want to worry about installation and/or client configuration a web based application is what you are looking for, but if the application requires high responsiveness and a lots of calculations then you should think in a WinForm app, as mentioned before layering your application will help you to reuse your code. also is this is going to be a commercial app you should think on the licensing restricctions

Oscar Cabrero
Assuming you have a homogenous platform (i.e. everyone is on Linux, or everyone is on Mac, or everyone is on Windows) then the advent of deployment products, like Sparkle and ClickOnce, has effectively eliminated the "I don't want to worry about installation" argument.
Travis Heseman