I need to know how to architect a web application. I have designed a website which is more like a buy & sell website. I designed it and coded it. It is still a beta version & I would like to know how a software architect would start this website.
Website address http://www.KashmirSouq.com
I have used ASP.Net 4.0 Membership along with profile to store certain information and created other table which are linked to user membership table etc..
I am using MS SQL SERVER as a back end.
What I am interested in is to know how a software architect would start this website project, step by step and what design patterns should be used for this project. I need to know this for learning purpose so that I can take a professional approach in future for other projects.
Note: *NO ASP.Net MVC related example*
From a software architecting point,
firstly if its just a website, its merely a UI (user interface) and therefore its more of a visual design and UI concern as well and the software part that deals with it would be out of a software architect’s concern i.e. network and host etc plus optimization (ofcourse without a cms in place).
Now if its a website that does require data thats dynamic or has some interactive way of dealing with data (all web is data) including cms systems etc than it does require software architecting and its technology agnostic. You can use any number of technologies to achieve your purpose be it the (.net) wisp stack, or the (php) (lamp) stack or the adobe stack or the java stack.
Yet again the important thing to understand is that web is just a view, the rest of the core of the software (I call it software rather than web) is a software architect’s domain. Ofcourse there will be a seperate set of special privillage to deal with a certain UI. Web is just a UI, just as a console or a desktop program, or a mobile app is. They could all have the same underlying core but would render on all of these devices in different way presenting different UI’s.
Now since your concern is about a website, there are lots of people who will suggest different architectures etc, however I would say the following other than what many people will say about going to study different technologies etc.
Create the most decoupled architecture possible, what I mean by that is a software that can change at will, i.e. a software that works on abstractions (interfaces or abstracts) rather than concretes. In .net framework since this question is marked in .net section you can use open source or microsoft unity for dependency etc. You will have to do a lot of reading to learn these concepts. This is also the most maintainable software design.
Create a data agnostic respository to access data so that you can plug in different dbs if your client needs it to be.
Create the most maintainable code, where things are not scattered across like magic strings but are easy modifiable.
Look for GOF design patterns to solve general problems.
Design a Service oriented architecture, access those repositories via service. Remember how you ask for a ticket from a provider of tickets and out comes the ticket, so you are the UI, ticket provider is the service. Anyone can request the ticket provided certain things are in place. These are again highly maintainable design solutions.
Platforms do inhibit these things sometimes but
In my opinion in .net framework with MVVM or MVC with regards to website (UI) fits a very best software architecture that takes these things into account. Its a long way but a better way to achieve a good architecture.
Learn about MVC here http://www.asp.net/mvc, go to forums and see how others are doing the same thing.
PS: my answers are limited to Microsoft as this question is posted under this technology.