With the wide variety of web development frameworks that are available, there always seems to be a perpetual incentive to "try something new". Hence, some of us find ourselves trading one framework for another, never being entirely satisfied with the end results. Granted there will always be niches where a given web framework will serve perfectly. But, there are many who have settled on using C++, Java or C# for building, say, desktop applications. The same isn't quite true when it comes to web development applications. Joel Spolsky touches on this in link text.
Let's say if I were to build such a framework: what would the functional requirements be? The goal here is to list concrete functional expectations (defined succinctly for the sake of a stackoverflow posting, of course). The best answer will be chosen based on its number of votes.
Just to get everyone started, the following would is a partial list of requirements. Note, these items were intentionally left somewhat abstract with the intent that folks can derive more concrete items from them:
OOP Consistency: Seamless data exchange and native object representation between server-side and client-side modules: That is, given a function on the client-side:
clientFoo()
and a function on the server-side:serverFoo()
one should be able to pass an objectobj
of any typeT
without requiring any marshalling:define clientFoo() { T obj = createObject() serverFoo(obj) }
OR
define serverFoo() { T obj = createObject() clientFoo(obj) }
This adds the requirement that native object representations must be the same on both the client and server side, including all composition, inter-class coupling, and encapsulation semantics. Basically, it should be entirely irrelevant whether a given class or a given instance resides on the client-side or the server-side.
Functional Consistency: Seamless functional and thread execution: One should be able to create a function on the client/server side and pass it over the boundary for execution. This includes uniform support for multi-threading (which should work consistently on both the client and server sides).
Multiple Application Session Interoperability: A perfect example here is inter-application "cut and paste" (as mentioned in the article pointed out above). I am not talking about trivial copying of text within the browser to another browser instance (or tab). What if one wants to paste say, a contact object in MySocialApp to YetAnotherSocialApp? This kind of inter-application data exchange is important.
Consistent cross-Browser compatible UI: creating AJAX "dialog boxes", progress indicators, tabs, etc should all be achievable using an API that is as seamless with the rest of the framework as the client/server integration discussed above. Oh, and yes, it has to work the same on all browsers (with browser distinctions being completely invisible to the developer).
Note: Just marked as community WIKI.