I had a good friend ask me about whether Model-View-Controller is a good framework for building apps on a Java App Server.
This led me to thinking about how different people view the job of building 'web applications'. I've always thought of MVC as useful way of building single-user/single-machine apps - classical programming. But I also see the separation of data, presentation and logic being very important and used in multi-tier large-scale systems - the two are very related.
The interesting part is that I think different audiences view 'the web' as one of these three facets of a large system;
- REST advocates view the Web as an information system - the 'model' part
- majority of web app developers and web app tools (asp/jsp/etc.) view it as user interface - the 'view' part
- many soap developers view it as functional services - the 'controller' part (sort of, i'm probably stretching the analogy here)
I think it is wonderful that the Web is rich enough to be viewed in these different ways, but I see it as a wholistic blending of all these. Knowing where other people are coming from can help in understanding each other and in communicating with and educating each other.
In my view, the current crop of Web application development tools is overly focused on user interface aspects. When I see development tools and servers project 'MVC' as a good way to build applications, it seems like they are looking from the server inward and applying MVC, where I see the value in looking at the server outward and applying MVC concepts. Design a system to separate data, presentation and logic /outside/ the web server. This lets you build applications that span a single server - whether clustered or not.
Another thought I had was to daydream about what a real REST oriented Web server development environment would look like. I'm imagining a blend of a RDBMS interface with HTTP/REST concepts - rather than saying "create table users (userid int, email varchar(255))" we could say "create collection users (userid uri)" or something. And we could easily build user interface without putting the UI template in the URI. "when user-agent like mozilla%" or "when accept like text/%" or something.