Using an application framework is an obvious way to develop software, since most projects can share many design features. However, an effective multi-project application framework is not easy to develop. To make matters worse, if it is badly designed it can hinder development rather than help it. There are many third party application frameworks available that work well, but usually have limited scope. We have developed our own application framework to under-pin our applications. It's been difficult and time consuming, but we've persisted because we couldn't ignore the obvious and overwhelming benefits. We have made our framework a central part of our software development process: It's used, supported and maintained by all our developers.

The framework is written in ANSI compliant C++, using the C++ Standard Library and STL. Though written in C++, it is perhaps the design of the framework that is most important: We have successfully developed partial versions in other languages as required, e.g. Ada 95.

Overview

  • Cross platform Graphical User Interface components, including controls supported by each platform, but also custom drawn controls for windowless environments, e.g. embedded or bespoke hardware.
  • Integrated OpenGL support.
  • Encourages a Model/View/Controller design pattern for applications.
  • Model objects with support for value range checking, formatting and persistent storage (e.g. via XML).
  • Communications objects for defining arbitrarily encoded messages, Sockets, Database interfaces, e.g. ODBC, XML support.
  • Scripting objects that allow asynchronous application control flows to be more directly implemented.
  • Integrated support for automated and remote testing.
  • Highly configurable logging.
  • Various utilities for common mathematical functions, string manipulation, etc.

Advantages

  • A large proportion of any application is already written, saving valuable time.
  • Many fundamental software architectural problems are already solved.
  • The design has been tested and optimized for much longer than the lifecycle of a single project, so gives significant efficiency and robustness to an application.
  • Many cross-platform issues are solved: the framework supports Windows, Mac and Unix platforms and is designed to make porting to other platforms easy.