The CSI Distributed Application Development Framework

What is the Framework?

The CSI Distributed Application Development Framework is an application framework developed by Misha Charrett for Win32 and .NET applications. In particular, it is specifically targeted at multi-threaded multi-tiered/distributed systems.

What are the Main Goals of the Framework?

The fundamental goal of the framework is to provide all necessary software “plumbing” for application development. Just as plumbing is the “pipes and fixtures for the distribution of water or gas in a building”, software “plumbing” can be said to be the “messaging and classes for the distribution of data in an application or applications”. In essence, the fundamental goal of the framework is to ensure that the developer spends all his/her time designing, implementing, and testing application-specific code, rather than the generic code that connects application functionality.

A further goal of the framework is to do this in a way that enables scalable development across threads and processes, without requiring the developer to master the low-level constructs used to build multi-threaded multi-tiered/distributed systems. This means that users of the framework can design their applications in terms of functional components and their interactions, without worrying about the low-level synchronisation mechanisms used to connect functional components or access shared resources.

How is the Framework Architected?

Fundamentally, the framework breaks application architecture down into a model where each application is built from six types of application “components”. These are “application threads”, “UI threads”, “communications clients”, “communications servers”, “database managers”, and a “globals” component. The GUI itself is actually a seventh application component, but since it is generally application-specific and interacts with the rest of the application via the UI threads, its design is not included in the framework.

All application components, except database managers, are “connected” via the passing of application “messages”. In the context of the framework, an application message is actually an object that holds arbitrarily structured information. In a logical sense it is somewhat like an XML document in that it can be stored as text, can contain typed data, and can have any structure. In fact, any application message can be stored as an XML document, although the reverse is not true.