I have chosen Python as a language and I have setup up an environment for programming in Python. Now I want to decide the best architecture for a complex CRM application that I will keep on accumulating more and more modules into it. Also the application should use cloud computing technologies like rackspace and/or Amazon cloud services.
The questions that I want the bidder to answer is
1. What are the different tiers of the application ? for example where would the business logic of CRM modules lie? and where the DB functionalities would lie? and for each tier define :
-What is its role?
-What is its inner architecture?
-How it will function? How it communicate with the other tiers?
-Where it will be hosted? on clients machine or on cloud like EC2?
2. Also how to do the networking between the different tiers? I'd really like to have the client send a simple request to the server along the lines of "fetch this (or these) object(s)", or "update this value in this object", then let the server decide if the user actually is allowed to do so, and then make the
change in the database.
3. Also I want the bidder to provide some technical sight on the best packages to use for each layer and for the networking . For example, would SQLAlchemy be a reliable package to use for the DB access layer? and or should I use the standard DBAPI of Python? Also what packages should I use for networking?
Here's a broad overview of what I need to do: cross-platform, client-side GUI apps that interact with a CRM server backed by a database in addition to a file sharing application that uses cloud storage transparently. The DB could be hosted locally (offline mode) or hosted remotely on one of the cloud services (online mode). the bidder needs to give a hint about how to do synch. in case of switching from offline to online modes and how to handle expected problems like concurrency for the DB and for the file sharing.
None of this is developed yet--actually, it's not even to the point of specs yet, I'm just trying to learn the best way to do this before I get into development. I want to plan this application out as thoroughly as possible before writing any code, and I want to do it the Right Way
Plz make sure to avoid handling this as a normal web application becoz I won't accept a traditional web application. Instead I want to end up with building desktop clients. I expect the client application(s) to be installed on local machines that connects to the core CRM server wherever it is hosted. The core CRM server might be spitted by itself into local tier that resides on the local machine and another tier that resides on a cloud service like EC2