We're starting to develop web application frameworks in ExSite 3.4, with an eye to making them stable by the 4.0 release.  An ExSite web application framework is essentially a common set of data structures and methods that are applicable to a variety of web applications.

For example, consider a toolkit that managed data collection forms on the web.  It provides you with a comprehensive set of features, such as:
  • build forms with any number of questions
  • add new questions to your library
  • define the answer formats, and allowed responses for each question
  • multilingual questions/answers, with translation management tools
  • reporting and data mining
  • e-mailing responses to administrators
  • and so on...
Elements of this feature set are required by a wide variety of web applications, such as Surveys, Polls, Registration Forms, Membership Forms, Exams & Quizzes, and so on.  Rather than each web application reproducing this feature set, we instead build an application framework that implements the basic model, along with some helper tools for the view and controller.  The individual applications then merely need to complete the view and controller to provide their users with a suitable UI and access to the features and functions that are relevant to that application.

Incidentally, the above example has been implemented as the Questionnaire framework, which is currently in alpha, and is expected to become the basis for future revisions of the Survey and Registration plug-ins, among others.

Other frameworks on the drawing board are an Article framework (to replace the Zine plug-in for E-zines, forums, and blogs) and an Event framework (for calendars and event management).  The CMS system itself could be treated as a framework as well, but it's not clear yet whether or not this is a good idea.

At the present time, an application framework is simply a subdirectory of the Modules directory in cgi-bin, which contains one or more framework packages.  A web application simply uses the framework package(s) to get access to its methods.