Hi guys. Since I have started practicing developing larger projects, I have come to discover that the most difficult part for me is deciding which technologies and libraries to use. The choice seems neverending; JavaEE, spring or JavaFX? JDBC or Hibernate? Maven or Ant? etc.
So I was thinking about starting a new project. This project will be designed to help with the everyday running of an estate agents. I have decided to make it a desktop app as I feel more comfortable doing this (probably use Swing). I could probably make this app using only core java libraries, but I want to challenge myself. The app will have features like a secure log in, view properties (add, view, delete), manage staff, send email, post to a website board etc. Basically a complete management system for an estate agents (if your American, I think you call them realters). I basically want to make it like I was working for a big programming company - so professional, robust, efficient etc - which is why I think I would need more than the core libraries. I am sure many of you have programming jobs, and if someone came to you with this project, what would you use to make it?
I would like to use spring, but all the examples I have followed seem to be based around web applications (even the demonstration of DI and AOP), so not to sure how this would work with swing.
So, as stated already, what I am really looking for is advise on how you choose your tools for the jobs, what you might consider using for this project, and if your feeling really talkative, how you choose a technology like JavaEE, Spring or JavaFX over each other, when they are all very similar in what their outcome offers.
And just to note, I am open to learning anything if it would proove beneficial in making professional applications, so feel free to mention something which I have failed to do so.
I would consider actually making this into a web application in stead of a Swing or JavaFX2 application. Most if not everything is moving to the web nowadays, so if you really want to learn what you'll likely be doing out in the field, go web. JavaFX2 might be a decent bridge there if you really need some client side stuff, but I kind of doubt it.
Before you can make any choice of technology, you'll first have to get some specs sorted out. The last time I did a "proof of concept" application, I started by setting up a fictive but still realistic case; fake customer with real world requirements and limitations (budget, timeframe, even security and trust was an issue). Based on those requirements and limitations I could setup up a proper requirements document and functional specifications.
When you're at that point, it might be worth thinking about what fits the bill - including what platform or platforms to target. Even if you have client side components, I'm pretty sure you'll still have a server side component in there somewhere for example.
I agree you should SERIOUSLY consider making this Web app, mainly because of the large audience you're targeting. When you fix a bug or publish a new version of a Web app, you only have to update the code on a server. With a client app, imagine the headache of notifying 5,000 real estate clients to download & install an update!
To say nothing of the problems you face when you get a trouble call, and you have to figure out what app version your customer has. With a Web app, all users have the same version automatically.
In addition, Web apps let you add some niceties, like easily monitoring (on the server!) which program features are used most often, etc.